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

时间:2012-03-15 22:18:37

标签: c# .net html-agility-pack

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

HtmlWeb web = new HtmlWeb();
 HtmlDocument doc = web.Load("http://test.com");

int count = doc.DocumentNode.SelectNodes("//img").Count();

我回来了38

当我转到该页面并$('img').size();时,我会回复43。为什么会有区别? "//img"只是在寻找根源吗?

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

1 个答案:

答案 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标头。