我想借助jsoup和xpath从html页面中提取数据。
这是我的java代码: -
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.w3c.dom.NodeList;
public class RssFeedRead {
public static void main(String args[])
{
try
{
Document doc = Jsoup.connect("http://timesofindia.indiatimes.com/world/china/China-sees-red-in-Abes-WWII-shrine-visit/articleshow/27989418.cms").get();
String title = doc.title();
System.out.println(title);
String exp = "//*[@id='cmtMainBox']/div/div[@class='cmtBox']/div/div[@class='box']/div[@class='cmt']/div/span";
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
XPathExpression expr = xPath.compile(exp);
NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);
for (int i = 0; i < node.getLength(); i++)
{
System.out.println(expr.evaluate(node.item(i), XPathConstants.STRING));
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
发生此错误: -
java.lang.ClassCastException: org.jsoup.nodes.Document cannot be cast to org.w3c.dom.Node
所以帮我解决这个错误
答案 0 :(得分:2)
我是这里的新生;经过简单的调查,我认为你应该注意两点:
1)您应该将Jsoup文档转换为org.w3c.dom.Document。您可以参考17802445来运行您应下载的代码DOMBuilder。
2)我不太了解CMS格式的页面,解析器是否支持此功能?我测试17802445中的代码与其他链接,它的工作原理。 但与你的链接我得到一个java.lang.NullPointerException,这表示演员表失败了。 请检查一下。
希望你能解决它!
我的第一个答案。
答案 1 :(得分:1)
请突出显示抛出异常的行,不要忽略堆栈跟踪。
这是有问题的一行:
NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);
您正在混合两个用于文档解析和处理的API,XPath和JSoup。 XPath表达式不了解JSoup文档,也无法处理它们。
您需要决定要将哪两种API用于特定工作。
答案 2 :(得分:0)
错误很明显:jsoup Document无法转换为w3c节点。
该行应为NodeList node = (NodeList) expr.evaluate(doc, XPathConstants.NODE);
您可能需要将其转换为jsoup节点(如果存在,我不熟悉此API)。
他们在javadoc
中拥有您需要的一切