我正在使用html敏捷包并做了类似的事情
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://test.com");
int count = doc.DocumentNode.SelectNodes("//img").Count();
我回来了38
。
当我转到该页面并$('img').size();
时,我会回复43
。为什么会有区别? "//img"
只是在寻找根源吗?
这就是为什么我可能会错过一些?
答案 0 :(得分:2)
是" // img"只是在寻找 根源?
不寻找后代节点(当前节点的子节点,孙子节点等)。您的xpath表达式选择文档中的所有图像。
当我转到该页面并执行$(' img')。size();我回来了43岁。
我的假设 - 一些图像是通过javascript动态创建的。 HtmlAgilityPack无法解决这个问题。
顺便说一句,对于http://test.com
我有87个带有AgilityPack(doc.DocumentNode.SelectNodes("//img").Count()
)的图像节点,以及来自Chome控制台($('img').size()
)的87个图像节点。
编辑:HtmlWeb.Load()
方法在内部使用WebRequest
类来获取数据。 AgilityPack的作用是正确解析数据。一些Web资源完全有可能为同一URI返回不同的内容,具体取决于User-Agent
等其他请求标头。例如。可以通过User-Agent
属性设置HtmlWeb.UserAgent
标头。