【发布时间】:2011-03-13 06:02:43
【问题描述】:
我找不到任何好的基于 Java 的 Web 抓取 API。我需要抓取的站点也不提供任何 API;我想使用一些 pageID 遍历所有网页并在其 DOM 树中提取 HTML 标题/其他内容。
除了网页抓取还有其他方法吗?
【问题讨论】:
标签: java web-scraping frameworks
我找不到任何好的基于 Java 的 Web 抓取 API。我需要抓取的站点也不提供任何 API;我想使用一些 pageID 遍历所有网页并在其 DOM 树中提取 HTML 标题/其他内容。
除了网页抓取还有其他方法吗?
【问题讨论】:
标签: java web-scraping frameworks
提取标题并不难,而且您有很多选择,请在 Stack Overflow 上搜索“Java HTML 解析器”。其中之一是Jsoup。
如果您知道页面结构,则可以使用 DOM 导航页面,请参阅 http://jsoup.org/cookbook/extracting-data/dom-navigation
这是一个很好的库,我在上一个项目中使用过它。
【讨论】:
最好的选择是使用 Selenium Web Driver,因为它
为编码人员提供视觉反馈(查看您的抓取操作,查看它停止的位置)
准确且一致,因为它直接控制您使用的浏览器。
慢。不会像 HtmlUnit 那样点击网页,但有时您不想点击太快。
Htmlunit 速度很快,但在处理 Javascript 和 AJAX 方面很糟糕。
【讨论】:
HTMLUnit 可以用来做网页抓取,它支持调用页面,填写和提交表单。我在我的项目中使用了这个。这是一个很好的用于网络抓取的 java 库。 read here for more
【讨论】:
mechanize for Java 非常适合这一点,正如 Wadjy Essam 所说,它使用 JSoup 来实现 HMLT。 mechanize 是一个分阶段的 HTTP/HTML 客户端,支持导航、表单提交和页面抓取。
http://gistlabs.com/software/mechanize-for-java/(以及这里的 GitHub https://github.com/GistLabs/mechanize)
【讨论】:
还有 Jaunt Java Web Scraping & JSON Querying - http://jaunt-api.com
【讨论】:
你可以看看jwht-scraper!
这是一个完整的 scraping 框架,具有开发人员可以从网络 scraper 获得的所有功能:
它与 (jwht-htmltopojo)[https://github.com/whimtrip/jwht-htmltopojo) 库一起工作,它使用了这里其他几个人提到的 Jsoup。
他们将一起帮助您构建出色的抓取工具,将 HTML 直接映射到 POJO,并在几分钟内绕过任何经典的抓取问题!
希望这可能对这里的一些人有所帮助!
免责声明,我是开发它的人,请随时让我知道您的言论!
【讨论】:
查看 HTML 解析器,例如 TagSoup、HTMLCleaner 或 NekoHTML。
【讨论】:
如果您希望自动抓取大量页面或数据,那么您可以尝试Gotz ETL。
它完全是模型驱动的,就像真正的 ETL 工具一样。数据结构、任务工作流程和要抓取的页面由一组 XML 定义文件定义,无需编码。可以使用带有 JSoup 的选择器或带有 HtmlUnit 的 XPath 来编写查询。
【讨论】:
对于这种类型的任务,我通常使用 Crawller4j + Jsoup。
使用 crawler4j 我从域下载页面,您可以使用正则表达式指定哪个 ULR。
使用 jsoup,我“解析”了您使用 crawler4j 搜索和下载的 html 数据。
通常您也可以使用 jsoup 下载数据,但 Crawler4J 可以更轻松地找到链接。 使用 crawler4j 的另一个好处是它是多线程的,可以配置并发线程数
【讨论】:
我通常使用 selenium,它是用于测试自动化的软件。 您可以通过 webdriver 控制浏览器,因此您不会遇到 javascripts 的问题,而且如果您使用完整版,通常不会很好地检测到它。可以更好地识别无头浏览器。
【讨论】: