【问题标题】:Extracting web page content with Java and XPath使用 Java 和 XPath 提取网页内容
【发布时间】:2012-12-14 00:51:41
【问题描述】:

我正在尝试从 Java 中的 http://www.amazon.com/gp/bestsellers/electronics 中提取 org.w3c.dom.NodeList。这是我用来在 Google Chrome JavaScript 控制台中显示结果的 XPath 语句:

$x("//div[@class='zg_itemRightDiv_normal']")

上述语句完美运行,但是当我使用 Java 的 javax.xml.xpathorg.w3c.dom 库时,我没有得到任何结果:

XPathExpression expr = xPath.compile("//div[@class='zg_itemRightDiv_normal']");
NodeList productNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

// In the above productNodes definition, doc is a org.w3c.dom.DocumentFragment

System.out.println(productNodes.getLength()); // prints out '0'

我错过了什么?

【问题讨论】:

  • 尝试给出完整路径....

标签: java xpath web-scraping


【解决方案1】:

这可能是因为当输入实际上是 HTML(而不是 XHTML)时,您试图将输入视为 XML。

您需要先将 HTML 转换为 XHTML - 我之前已成功使用 TagSoup,但也有其他库可以做到这一点(JTidy、NekoHTML)。

TagSoup 将为您提供一个 SAX 解析器,然后您可以将其转换为 DOM,然后使用 XPath 进行处理。

【讨论】:

    【解决方案2】:

    这个问题的解决方案最终是双重的:

    1. 我正在阅读的DocumentFragment 不包含我试图提取的信息;使用完整的Document 解决了这个问题
    2. 出于某种原因,将 XPath 语句中的 HTML 标记大写可以让我获得我想要的信息(即xPath.compile("//DIV[@class='zg_itemRightDiv_normal']"))。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 2014-09-23
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2018-12-23
      相关资源
      最近更新 更多