为什么Html.AgilityPack会错过一些图像标签

本文关键字:图像 标签 错过 Html AgilityPack 为什么 | 更新日期: 2023-09-27 18:27:53

我正在使用html敏捷性包,并做了类似于的事情

HtmlWeb web = new HtmlWeb();
 HtmlDocument doc = web.Load("http://test.com");
int count = doc.DocumentNode.SelectNodes("//img").Count();

我取回38

当我转到那个页面并执行$('img').size();时,我会得到43。为什么会有区别?"//img"只是在寻找根目录吗?

这就是为什么我可能会错过一些吗?

为什么Html.AgilityPack会错过一些图像标签

"//img"只是在寻找根?

否,它正在查找子节点(当前节点的子节点、孙节点等)。您的xpath表达式从文档中选择所有图像。

当我转到那个页面并执行$('img').size();我得到43。

我的假设是,有些图像是通过javascript动态创建的。HtmlAgilityPack无法处理此问题。

顺便说一下,对于http://test.com,我使用AgilityPack(doc.DocumentNode.SelectNodes("//img").Count())获得了87个图像节点,从Chome控制台($('img').size())获得了1987个图像节点。

EDIT:HtmlWeb.Load()方法内部使用WebRequest类来获取数据。AgilityPack的作用是正确解析数据。完全有可能某些web资源根据某些请求头(如User-Agent和其他请求头)为同一URI返回不同的内容。例如,可以通过HtmlWeb.UserAgent属性设置User-Agent报头。