获取html页面上的所有链接?

max*_*axp 40 c# asp.net

我正在做一个小爱好项目.我已经编写了代码来获取URL,下载头并返回mime类型/内容类型.

然而,在此之前的步骤是我坚持 - 我需要检索页面上的所有网址的内容,在标签内,并在引号即

...
<link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" />
...
Run Code Online (Sandbox Code Playgroud)

会找到favicon链接.

在.net库中是否有任何帮助,或者这是否必须是正则表达式的一个案例?

wom*_*omp 62

我会看看使用Html Agility Pack.

以下是他们的示例页面中有关如何查找页面中所有链接的示例:

 HtmlWeb hw = new HtmlWeb();
 HtmlDocument doc = hw.Load(/* url */);
 foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
 {

 }
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 38

您需要使用HTML Agility Pack.

例如:

var doc = new HtmlWeb().Load(url);
var linkTags = doc.DocumentNode.Descendants("link");
var linkedPages = doc.DocumentNode.Descendants("a")
                                  .Select(a => a.GetAttributeValue("href", null))
                                  .Where(u => !String.IsNullOrEmpty(u));
Run Code Online (Sandbox Code Playgroud)


And*_*are 16

BCL中没有任何内置功能,但幸运的是,您可以使用HTML Agility Pack完成此任务.

至于您的具体问题,请参阅使用HtmlAgilityPack轻松从一段html中提取链接:

private List<string> ExtractAllAHrefTags(HtmlDocument htmlSnippet)
{
    List<string> hrefTags = new List<string>();

    foreach (HtmlNode link in htmlSnippet.DocumentNode.SelectNodes("//a[@href]"))
    {
        HtmlAttribute att = link.Attributes["href"];
        hrefTags.Add(att.Value);
    }

    return hrefTags;
}
Run Code Online (Sandbox Code Playgroud)

  • 我不同意基于LINQ的方法更简单.声明?是.功能?绝对.更简单?不,两种解决方案的简单性都相同. (5认同)
  • 使用LINQ可以更简单地完成此操作. (2认同)

小智 7

正则表达式怎么样?

<(a|link).*?href=(\"|')(.+?)(\"|').*?>
Run Code Online (Sandbox Code Playgroud)

用旗帜IgnoreCaseSingleLine

请参阅systemtextregularexpressions.com regex.matches上的演示