有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用Java和XPath提取网页内容

我试图从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'

我错过了什么


共 (2) 个答案

  1. # 1 楼答案

    这个问题的解决方案有两个方面:

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

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

    您需要首先将HTML转换为XHTML—我以前已经成功地使用了TagSoup,但是还有其他库可以这样做(JTidy、NekoHTML)

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