【发布时间】:2016-05-29 22:00:18
【问题描述】:
我刚开始使用 HtmlAgilityPack 从网站上抓取一些文本。我进行了实验,发现在使用 SelectNodes 方法时,某些网站比其他网站更容易获得正确的 XPath。我相信我做错了什么,但无法弄清楚。
例如,在 Google Chrome 中探索 DOM 时,我可以复制 XPath://*[@id="page"]/span/table[7]/tbody/tr[1]/td/span[2]/a 然后我会做类似的事情。
var search = doc.DocumentNode.SelectNodes("//[@id=\"page\"]//span//table//tr//td//span//a"
在foreach loop 中使用search 时,我得到一个空引用错误,并且调试器说search 是空的。所以我假设 XPath 是错误的..(或者我正在做其他完全错误的事情)所以我的问题是我究竟如何为 HtmlAgilityPack 找到正确的 XPath 来找到这些节点?
【问题讨论】:
-
我想我能够弄清楚.. xpath 包含在 iframe 中。
-
请注意,您可以使用支持 css 选择器的扩展,例如
ScrapySharp,以及HtmlAgilityPack,并且您将能够使用 css 而不是 xpath,如果这样更容易你(对我来说确实如此,因为我已经熟悉 css 但不熟悉 xpath)。此外,AngleSharp是类似于HtmlAgilityPack的解析器,但提供了对 css 选择器的内置支持,无需其他包。 -
@Veverke 我会看看你的建议。谢谢楼主!
-
@Veverke 你知道有一个库可以从当前页面的 iFrame 中抓取数据吗?我已经测试了 ScrapySharp,它更容易(再次感谢)但是就像 HtmlAgilityPack 一样,它不适用于页面上的直接 iframe 源。只有当我自己抓取 iframe 源 url 时它才会起作用。
-
您要解析的网站是什么?我可以看看。但是,如果 iframe 由 javascript 加载或在 html 中动态加载 - 它在请求响应时确实不可用,因此单独解析将无济于事。 AngleSharp - 我认为能够在呈现最终的 html 文档之前处理 javascript - 但我还不能让它为我工作。
标签: c# xpath html-agility-pack