【问题标题】:Web scraping with Java使用 Java 进行网页抓取
【发布时间】:2011-03-13 06:02:43
【问题描述】:

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

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

【问题讨论】:

    标签: java web-scraping frameworks


    【解决方案1】:

    jsoup

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

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

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

    【讨论】:

    • 谢谢,这是一个很好的库,没有依赖关系,所以它非常轻量级。此外,它是无头的,因此不需要浏览器(我在 Selenium 打开 Chrome 时遇到了问题,我根本无法使用 HtmlUnit)。 Selenium 必须更真实,但是这个库可能在大多数抓取情况下都可以达到目的,而且设置起来非常容易:添加依赖项就可以了。
    • 确实是优秀的图书馆。易于设置和强大的正则表达式支持。 doc.select("li[id^=cosid_]").酷。
    • 我最近开源了我的网络抓取框架,它不仅可以让你用 Jsoup 和 HtmlUnit 解析文档,还可以为你处理并行化,如果需要可以管理大量的代理服务器: github.com/subes/invesdwin-webproxy
    • @subes 你的框架可以用于网络分析测试吗?
    • 我的要求是做“Web Analytics”自动化,Jsoup能做所有的测试活动吗?
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 在此补充一下,为了提高 Selenium Web Driver 的性能,您可以使用无头浏览器(Chrome、Firefox)
    【解决方案3】:

    HTMLUnit 可以用来做网页抓取,它支持调用页面,填写和提交表单。我在我的项目中使用了这个。这是一个很好的用于网络抓取的 java 库。 read here for more

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          你可以看看jwht-scraper

          这是一个完整的 scraping 框架,具有开发人员可以从网络 scraper 获得的所有功能:

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

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

          希望这可能对这里的一些人有所帮助!

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

              • 7 年 6 个月前询问。
              【解决方案9】:

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

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

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

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

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-11-07
                  • 2018-02-06
                  • 2017-06-23
                  • 2019-04-06
                  • 2019-06-23
                  • 2011-10-21
                  相关资源
                  最近更新 更多