用Java进行Web抓取


72

我找不到任何基于Java的良好网页抓取API。我需要抓取的网站也没有提供任何API;我想遍历所有网页,pageID并在其DOM树中提取HTML标题/其他内容。

除了网页抓取还有其他方法吗?

Answers:


99

so

提取标题并不困难,并且您有许多选择,请在此处的Stack Overflow中搜索“ Java HTML解析器”。其中之一就是Jsoup

如果知道页面结构,则可以使用DOM导航页面,请参阅 http://jsoup.org/cookbook/extracting-data/dom-navigation

这是一个很好的库,我在上一个项目中使用了它。


2
谢谢,这是一个不错的库,没有依赖项,因此非常轻巧。另外,它没有头,因此不需要浏览器(我打开Selenium遇到了问题,而我根本无法使用HtmlUnit)。Selenium必须更现实,但是该库在大多数抓取情况下都可以达到目的,并且它真的很容易设置:添加依赖项就可以了。
Ferran Maylinch

确实是优秀的图书馆。易于设置和强大的正则表达式支持。doc.select(“ li [id ^ = cosid_]”)。凉。
EMM 2016年

我最近开放了我的Web抓取框架的资源,该框架不仅允许您使用Jsoup和HtmlUnit解析文档,而且还可以为您处理并行化,并且可以根据需要管理大量代理服务器:github.com/subes/invesdwin- webproxy
6

@subes您的框架可以用于网络分析测试吗?
vikramvi '17

我的要求是进行“ Web Analytics”自动化,Jsoup是否可以进行所有测试活动?
vikramvi

22

最好的选择是使用Selenium Web Driver,因为它

  1. 向编码器提供视觉反馈(查看抓取的实际操作,查看停止的地方)

  2. 准确且一致,因为它直接控制您使用的浏览器。

  3. 慢。不会像HtmlUnit那样打网页,但是有时候您不想太快打。

    Htmlunit速度很快,但是在处理Javascript和AJAX方面却令人恐惧。


1
要在Selenium Web Driver中提高性能,您可以使用无头浏览器(Chrome,Firefox)
Adi Ohana

14

HTMLUnit可用于进行网页抓取,它支持调用页面,填写和提交表单。我在项目中使用了这个。这是用于Web抓取的好Java库。 在这里阅读更多




4

您可能会研究jwht-scrapper

这是一个完整的抓取框架,具有开发人员可以从网络抓取器期望的所有功能:

它可以与(jwht-htmltopojo)[ https://github.com/whimtrip/jwht-htmltopojo)lib一起使用,itsef使用的是Jsoup,在此其他人提到过。

他们在一起将帮助您构建很棒的剪贴器,直接将HTML映射到POJO,并在短短几分钟内绕过任何经典的剪贴问题!

希望这对这里的人有所帮助!

免责声明,我是开发它的人,请随时让我知道您的评论!


3

查看HTML解析器,例如TagSoup,HTMLCleaner或NekoHTML。


3

如果您希望自动抓取大量页面或数据,则可以尝试Gotz ETL

它像真正的ETL工具一样完全由模型驱动。数据结构,任务工作流和要抓取的页面是用一组XML定义文件定义的,不需要编码。可以使用带有JSoup的选择器或带有HtmlUnit的XPath来编写查询。


问了7年零6个月前。
厄立特里亚

2

对于此类任务,我通常使用Crawller4j + Jsoup。

通过使用crawler4j,我从一个域下载页面,您可以使用正则表达式指定哪个ULR。

使用jsoup,我可以“解析”您通过搜寻器4j搜索并下载的html数据。

通常,您也可以使用jsoup下载数据,但是Crawler4J使其更易于查找链接。使用crawler4j的另一个优点是它是多线程的,您可以配置并发线程数

https://github.com/yasserg/crawler4j/wiki


1

通常我使用硒,这是用于测试自动化的软件。您可以通过网络驱动程序来控制浏览器,因此您不会遇到javascript的问题,如果您使用完整版,通常不会被发现。无头浏览器可以被更好地识别。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.