【问题标题】:how to use Xpath with LibXml 2如何在 LibXml 2 中使用 Xpath
【发布时间】:2012-02-01 05:36:10
【问题描述】:

在这个address 中,我试图刮一个标签(即大价格,红色粗体)

我使用 LIBXML 2.2

当我尝试通过这个 XPATH 提取标签时

//*[@class='priceLarge']

有效!

但为了使查询更容易,我想在 Firefox 上使用 FireBug。

使用 FireBug 它给了我这个 XPath

/html/body/div[2]/form/table[3]/tbody/tr/td/div/table/tbody/tr[2]/td[2]/span/b

使用这个 Xpath 它不起作用,似乎这个没有给出完整的查询。我怎样才能修改这个 XPath 来抓取项目?

【问题讨论】:

    标签: xpath xquery libxml2


    【解决方案1】:

    Firefox 和其他浏览器在 HTML 中生成 tbody 标签。

    事实上,tbody 可能不存在,因此您可以在 XPath 中删除它。 (/html/body/div[2]/form/table[3]/tr/td/div/table/tr[2]/td[2]/span/b) 您可以通过保存应用程序中的 HTML 并在文本编辑器中查看它来测试它。

    因为它的意图似乎是从网页中提取信息,但是如果您使用 XPath 较少依赖于树形结构(即//b[@class='priceLarge']),您的应用程序可能更能抵抗网页中的更改。

    编辑:似乎除了tbody 问题之外,Firefox 将div(ID:divsinglecolumnminwidth)元素呈现为包含form元素(ID:handleBuy)。

    使用 XML 编辑器查看 html 会发现 form 元素是该 div 元素的兄弟,因此表达式应以 /html/body/form/table[3] 开头。

    其中一个用于测试 XPath 表达式的工具是HAP Testbed

    【讨论】:

    • 我在没有 tbody 的情况下试过了,但还是不行!有什么想法吗?
    • ----/html/body/div[2]/form/table[3]/tbody/tr/td/div/table/tbody/tr[2]/td[2] /span[1]/b --- 我在评估器中尝试了这个,它给了我正确的值。我刚刚将最后一次旋转更改为 spin[1]。但是当我将它与 LibXml 2 一起使用时,它仍然不起作用!我不知道为什么!
    • 如果您没有将 HTML 复制到程序中,请不要将其从 Firefox 查看源代码复制到评估器中。如果您在程序中下载它,请将 URL 输入到评估器(如果可能)或保存程序下载的 HTML 并复制它。我们需要应用程序下载的 HTML,而不是浏览器处理的 HTML。除此之外,在 LibXml2 中慢慢构建 XPath,直到您没有找到任何值,这将缩小差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多