为什么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"
只是在寻找根目录吗?
这就是为什么我可能会错过一些吗?
"//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
报头。