用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.xpath
和org.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'
我错过了什么
# 1 楼答案
这个问题的解决方案有两个方面:
DocumentFragment
没有包含我试图提取的信息;使用完整的Document
解决了这个问题xPath.compile("//DIV[@class='zg_itemRightDiv_normal']")
)李># 2 楼答案
这可能是因为您试图将输入视为XML,而实际上它是HTML(而不是XHTML)
您需要首先将HTML转换为XHTML—我以前已经成功地使用了TagSoup,但是还有其他库可以这样做(JTidy、NekoHTML)
TagSoup将为您提供一个SAX解析器,您可以将其转换为DOM,然后使用XPath进行处理