获取页面上的所有链接 - HtmlAgilityPack

get all links on a page - HtmlAgilityPack

提问人:MH Gholizadeh 提问时间:5/3/2021 最后编辑:MH Gholizadeh 更新时间:5/4/2021 访问量:573

问:

我试图使用 HtmlAgilityPack 从网页中获取所有链接(a[href] 链接);

我的代码

HtmlWeb web = new HtmlWeb();
HtmlDocument site = web.Load("https://www.google.com/");
HtmlNodeCollection links = site.DocumentNode.SelectNodes("//a[@href]");
foreach (HtmlNode link in links)
{
    Console.WriteLine(link.GetAttributeValue("href", "DefaultValue"));   
}

问题: 我注意到我的代码没有从页面中获得“所有”链接,并且错过了一些链接......

我使用 Jsoup Java 的结果

我使用 HtmlAgilityPack C 的结果#

我在 java 中使用 JSoup 执行此操作,并且效果很好。(谷歌主页上的16个链接) 但是使用 HtmlAgilityPack,我在同一页面上获得了 13 个链接...... 或者问题可能出在别的地方...... (相对链接也存在问题,但稍后会修复)

C# 网页抓取 解析 html-agility-pack html-解析器

评论

0赞 mjwills 5/3/2021
请分享一个最小的可重现示例,其中包含示例 HTML。
0赞 mjwills 5/3/2021
您可能需要在 href 上调用 stackoverflow.com/a/6696727/34092,因为 href 将被编码。
0赞 Jimi 5/3/2021
渲染页面中有 54 个锚点。未呈现的页面(在所有 JavaScript 运行之前)包含 13 个锚点。由于该方法不呈现内容(不运行脚本,它只使用 HttpClient 或 HttpWebRequest),因此 13 是正确的定位点数。(使用语言设置为 : 不同语言可能会生成不同数量的 Anchors) -- 如果您改用 ,则会得到完全不同的结果。Load()https://www.google.com/en-USLoadFromWeb()

答: 暂无答案