获取html页面上的所有链接?
我正在做一个小爱好项目。 我已经写了代码来获得一个URL,下载头,并返回MIMEtypes/内容types。
然而,在这之前的步骤是一个即时贴坚持 – 我需要检索基于内部标签的页面上的所有url的内容,并在引号即
... <link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" /> ...
会findfavicon链接。
在.net库中有没有什么有用的东西,或者这将是一个正则expression式的情况?
我会看看使用Html Agility Pack 。
以下是他们的示例页面中的一个示例,其中介绍如何查找页面中的所有链接:
HtmlWeb hw = new HtmlWeb(); HtmlDocument doc = hw.Load(/* url */); foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) { }
您需要使用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));
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; }
如何正则expression式?
<(a|link).*?href=(\"|')(.+?)(\"|').*?>
带有标志IgnoreCase
和SingleLine
请参阅systemtextregularexpressions.com上的演示。regex.matches