Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取html页面上的所有链接?_C#_Asp.net - Fatal编程技术网

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

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库中有什么有用的东西吗?或者这一定是正则表达式的一个例子吗?我会

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

然而,在这之前的步骤是我一直坚持的一步——我需要检索页面上所有URL的内容,这些内容基于标记内部和引号,即

...
<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=(\"|')(.+?)(\"|').*?>