在Java中解析HTML网页

4

我需要解析和读取大量的HTML网页(100+),以查找特定内容(几行几乎相同的文本)。

我使用了带有正则表达式的扫描器对象和jsoup与其HTML解析器。

这两种方法都很慢,并且使用jsoup时我遇到了以下错误: java.net.SocketTimeoutException: Read timed out(多台具有不同连接的计算机)

有更好的方法吗?

编辑:

现在我已经让jsoup工作了,我认为更好的问题是如何加速它?


1
Jsoup支持DOM遍历和[CSS]选择器,是吧?(为什么要使用正则表达式?:-/) - user166390
3个回答

5

你是否尝试延长JSoup的超时时间?默认情况下只有3秒钟。例如,请参见这个链接


谢谢。我已经让jsoup代码运行起来了。它的运行时间为2分钟。 - samwise

2
我建议使用开源网络搜索解决方案Nutch,它包含对HTML解析的支持。这是一个非常成熟的库,底层使用Lucene,我发现它是一个非常可靠的爬虫。请参考:http://nutch.apache.org/

Jericho也是个不错的选择。我用过Nutch和Jericho,但对JSoup没有经验,无法评论为什么它会花费这么长的时间。 - jkraybill

0
学习的一个很好的技能是xpath。它非常适合那份工作!我刚开始学习它,用于自动化测试。如果你有问题,请给我发消息。尽管我不是专家,但我很乐意帮助你。
既然你对Java感兴趣,这里有一个不错的链接: http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html 即使你不使用Java,学习xpath也是一件好事,所以我会选择这条路线。

除了HTML不是XML之外,我怀疑如果还包含了一个通过XPath公开HTML的库的链接,这篇文章就不会收到负评(不是我的)。 (这样的工具能够将HTML“作为”XML DOM处理,绝对值得讨论。) - user166390
XPath是用于XML的,对于任何不兼容XML的HTML都无法使用。 - Ed Staub
@Mr. Wanta 是的,那么有哪个Java库可以解析HTML(不仅仅是XML)并在其上公开XPath呢? :) 这个答案还不错,但缺少一些重要的部分。(请注意,问题标记为jsoup,支持CSS选择器,但不支持 XPath - 看起来已经请求了此功能)。 - user166390
@Mr. Wanta - 正则表达式也可以用于解析HTML,但这并不是一个好主意。XPath在某些页面上可以工作,但在其他页面上可能无法正常工作。如果您对输入集没有完全控制,则这是一个糟糕的选择。 - Ed Staub
谢谢你的澄清,今天我学到了新东西。这就是为什么我喜欢Stack Overflow!它让我感到更加谦卑并且学到更多! - Entree
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接