73

我找不到任何好的网络抓取基于 Java 的 API。我需要抓取的站点也不提供任何 API;我想使用一些迭代所有网页pageID并在其 DOM 树中提取 HTML 标题/其他内容。

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

4

10 回答 10

99

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

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

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

于 2010-07-08T09:44:11.720 回答
22

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

  1. 为编码人员提供视觉反馈(查看您的抓取操作,查看它停止的位置)

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

  3. 慢的。不会像 HtmlUnit 那样点击网页,但有时您不想点击太快。

    Htmlunit 速度很快,但在处理 Javascript 和 AJAX 时很糟糕。

于 2010-09-23T19:45:12.687 回答
14

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

于 2011-07-21T12:22:16.937 回答
4

Java 的 mechanize 非常适合这个,正如 Wadjy Essam 提到的,它使用 JSoup 来实现 HMLT。mechanize 是一个分阶段的 HTTP/HTML 客户端,支持导航、表单提交和页面抓取。

http://gistlabs.com/software/mechanize-for-java/(以及这里的 GitHub https://github.com/GistLabs/mechanize

于 2012-09-17T21:31:21.850 回答
4

还有 Jaunt Java Web Scraping & JSON Querying - http://jaunt-api.com

于 2017-09-19T14:47:50.973 回答
4

您可能会查看jwht-scraper

这是一个完整的抓取框架,具有开发人员可以从网络抓取工具中获得的所有功能

它与 (jwht-htmltopojo)[https://github.com/whimtrip/jwht-htmltopojo) lib 一起工作,它使用了这里其他几个人提到的 Jsoup。

他们将一起帮助您构建出色的抓取工具,将 HTML 直接映射到 POJO,并在几分钟内绕过任何经典的抓取问题!

希望这可以帮助这里的一些人!

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

于 2018-08-10T15:39:10.780 回答
3

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

于 2010-07-08T09:45:47.023 回答
3

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

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

于 2018-01-23T16:46:03.033 回答
3

对于这种类型的任务,我通常使用 Crawller4j + Jsoup。

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

使用 jsoup,我“解析”了您使用 crawler4j 搜索并下载的 html 数据。

通常你也可以用 jsoup 下载数据,但是 Crawler4J 更容易找到链接。使用 crawler4j 的另一个好处是它是多线程的,可以配置并发线程数

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

于 2020-09-09T22:14:46.210 回答
1

通常我使用 selenium,它是用于测试自动化的软件。您可以通过 webdriver 控制浏览器,因此您不会遇到 javascripts 的问题,而且如果您使用完整版,通常不会被很好地检测到。可以更加识别无头浏览器。

于 2020-09-18T11:13:15.490 回答