C# 获取html页面上的所有链接?
我正在做一个小爱好项目。我已经编写了获取url、下载标题并返回mime类型/内容类型的代码 然而,在这之前的步骤是我一直坚持的一步——我需要检索页面上所有URL的内容,这些内容基于标记内部和引号,即C# 获取html页面上的所有链接?,c#,asp.net,C#,Asp.net,我正在做一个小爱好项目。我已经编写了获取url、下载标题并返回mime类型/内容类型的代码 然而,在这之前的步骤是我一直坚持的一步——我需要检索页面上所有URL的内容,这些内容基于标记内部和引号,即 ... <link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" /> ... 。。。 ... 会找到favicon链接 在.net库中有什么有用的东西吗?或者这一定是正则表达式的一个例子吗?我会
...
<link rel='shortcut icon' href="/static/favicon.ico" type="image/x-icon" />
...
。。。
...
会找到favicon链接
在.net库中有什么有用的东西吗?或者这一定是正则表达式的一个例子吗?我会考虑使用
下面是一个直接来自示例页面的示例,介绍如何查找页面中的所有链接:
HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(/* url */);
foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
}
BCL中没有内置任何内容,但幸运的是,您可以使用来非常简单地完成此任务 关于您的具体问题,请参见:
private List ExtractAllAHrefTags(HtmlDocument htmlSnippet)
{
List hrefTags=新列表();
foreach(htmlSnippet.DocumentNode.SelectNodes(“//a[@href]”)中的HtmlNode链接)
{
HtmlAttribute att=link.Attributes[“href”];
hrefTags.Add(附件值);
}
返回hrefTags;
}
您需要使用
例如:
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));
正则表达式呢
<(a|link).*?href=(\"|')(.+?)(\"|').*?>
我有一种奇怪的感觉,认为Html敏捷包是一种发展方向……我不认为基于LINQ的方法更简单。声明的?对功能的绝对地更简单?不,这两种解决方案在简单性上是相同的。XPath应该使用更少的内存。我建议使用XPath的内存密集度要低得多。只是想补充一点,如果您尝试加载的站点有一些gzip压缩,它将在hw上引发异常。load
:“'gzip'不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档
。找到了一个解决方法要小心。这是一个获得NullReferenceException的机会<代码>返回:一个HtmlAgilityPack.HtmlNodeCollection,其中包含与HtmlAgilityPack.HtmlNode.XPath查询匹配的节点集合,如果没有节点与XPath表达式匹配,则返回null
感谢您使用全面且自解释的LINQ查询!这是一个比求助于整个第三方库更好的解决方案。
<(a|link).*?href=(\"|')(.+?)(\"|').*?>