一些帮助在Java中抓取页面
我需要使用Java刮取一个网页,我已经读到regex是一种非常低效的方式,应该将其放入DOM文档中进行导航 我试着阅读文档,但它似乎太广泛了,我不知道从哪里开始 您能告诉我如何将表刮入数组吗?我可以试着从那里找到我的路。一个片段/示例也可以一些帮助在Java中抓取页面,java,html,xhtml,screen-scraping,Java,Html,Xhtml,Screen Scraping,我需要使用Java刮取一个网页,我已经读到regex是一种非常低效的方式,应该将其放入DOM文档中进行导航 我试着阅读文档,但它似乎太广泛了,我不知道从哪里开始 您能告诉我如何将表刮入数组吗?我可以试着从那里找到我的路。一个片段/示例也可以 谢谢。正则表达式绝对是最好的选择。构建DOM过于复杂,本身需要大量的文本解析 将您试图废弃的网页转换为XHTML文档。有几个选项可以用Java实现这一点,例如和。这些工具还将自动修复格式错误的HTML(例如,关闭未关闭的标记)。两者都工作得很好,但我更喜欢J
谢谢。正则表达式绝对是最好的选择。构建DOM过于复杂,本身需要大量的文本解析
public static void main(String[] args) throws Exception {
// Create a new JTidy instance and set options
Tidy tidy = new Tidy();
tidy.setXHTML(true);
// Parse an HTML page into a DOM document
URL url = new URL("http://www.cs.grinnell.edu/~walker/fluency-book/labs/sample-table.html");
Document doc = tidy.parseDOM(url.openStream(), System.out);
// Use XPath to obtain whatever you want from the (X)HTML
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//td[@valign = 'top']/a/text()");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
List<String> filenames = new ArrayList<String>();
for (int i = 0; i < nodes.getLength(); i++) {
filenames.add(nodes.item(i).getNodeValue());
}
System.out.println(filenames);
}
publicstaticvoidmain(字符串[]args)引发异常{
//创建新的JTidy实例并设置选项
整洁的,整洁的;
tidy.setXHTML(true);
//将HTML页面解析为DOM文档
URL=新URL(“http://www.cs.grinnell.edu/~walker/fluency book/labs/sample table.html”);
Document doc=tidy.parseDOM(url.openStream(),System.out);
//使用XPath从(X)HTML中获取所需内容
XPath=XPathFactory.newInstance().newXPath();
XPathExpression expr=xpath.compile(//td[@valign='top']/a/text());
NodeList节点=(NodeList)expr.evaluate(doc,XPathConstants.NODESET);
列表文件名=新的ArrayList();
对于(int i=0;i
结果将是[整数处理:,图像处理:,相册:,运行时实验:,更多运行时实验:
你可以使用的另一个很酷的工具是。它基本上完成了我上面所做的一切,但使用XML文件来配置提取管道。如果您所做的只是将一个表刮到一个数据文件中,那么regex就可以了,甚至可能比使用DOM文档更好。DOM文档将占用大量内存(特别是对于非常大的数据表),因此您可能需要一个用于大型文档的SAX解析器。您可以试试。这是一个很好的库,有很好的示例代码。这是一个优雅的解决方案,但对于一些简单的刮取来说,这是一个致命的错误。构建一个大型网页的dom会非常慢(最初的例子是一个小页面,但通常现在大多数网页都有复杂的dom)。我看了一下jSoup文档,它看起来非常好。我一直在为Python寻找BeautifulSoup中的一些东西,现在就在这里!