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

时间:2010-02-11 22:53:53

标签: c# asp.net

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

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

...
<link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" />
...

会找到favicon链接。

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

4 个答案:

答案 0 :(得分:60)

我会考虑使用Html Agility Pack

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

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

 }

答案 1 :(得分:36)

您需要使用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));

答案 2 :(得分:16)

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

至于您的具体问题,请参阅Easily extracting links from a snippet of html with HtmlAgilityPack

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;
}

答案 3 :(得分:7)

Regex怎么样?

<(a|link).*?href=(\"|')(.+?)(\"|').*?>
带有标记IgnoreCaseSingleLine

请参阅systemtextregularexpressions.com regex.matches

上的演示