我找不到任何好的网络抓取基于 Java 的 API。我需要抓取的站点也不提供任何 API;我想使用一些迭代所有网页pageID
并在其 DOM 树中提取 HTML 标题/其他内容。
除了网页抓取之外还有其他方法吗?
我找不到任何好的网络抓取基于 Java 的 API。我需要抓取的站点也不提供任何 API;我想使用一些迭代所有网页pageID
并在其 DOM 树中提取 HTML 标题/其他内容。
除了网页抓取之外还有其他方法吗?
提取标题并不困难,而且您有很多选择,请在 Stack Overflow 上搜索“ Java HTML 解析器”。其中之一是Jsoup。
如果您知道页面结构,则可以使用 DOM 导航页面,请参阅 http://jsoup.org/cookbook/extracting-data/dom-navigation
这是一个很好的库,我在上一个项目中使用过它。
你最好的选择是使用 Selenium Web Driver,因为它
为编码人员提供视觉反馈(查看您的抓取操作,查看它停止的位置)
准确且一致,因为它直接控制您使用的浏览器。
慢的。不会像 HtmlUnit 那样点击网页,但有时您不想点击太快。
Htmlunit 速度很快,但在处理 Javascript 和 AJAX 时很糟糕。
HTMLUnit可用于网页抓取,它支持调用页面、填写和提交表单。我在我的项目中使用了这个。这是一个很好的用于网络抓取的 java 库。 在这里阅读更多
Java 的 mechanize 非常适合这个,正如 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!
这是一个完整的抓取框架,具有开发人员可以从网络抓取工具中获得的所有功能:
它与 (jwht-htmltopojo)[https://github.com/whimtrip/jwht-htmltopojo) lib 一起工作,它使用了这里其他几个人提到的 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 的问题,而且如果您使用完整版,通常不会被很好地检测到。可以更加识别无头浏览器。