【问题标题】:Fetch complete web page using java code使用java代码获取完整的网页
【发布时间】:2012-04-24 14:06:38
【问题描述】:

我想实现一个 java 方法,它以 URL 作为输入并将整个网页包括 css、图像、js(所有相关资源)存储在我的磁盘上。我使用 Jsoup html 解析器来获取 html 页面。现在我想实现的唯一选择是使用 jsoup 获取页面,现在解析 html 内容并将相对路径转换为绝对路径,然后对 javascript、图像等发出另一个获取请求并将它们保存在磁盘上。 我还阅读了有关 html 清洁器、htmlunit 解析器的信息,但我认为在所有这些情况下,我都必须解析 html 内容以获取图像、css 和 javascript 文件。

任何建议,无论我的想法是否正确。 或者有什么简单的方法可以完成这个任务??

【问题讨论】:

  • 我在 SO 上发现了一些类似的问题,但这个问题的答案仍然没有答案:(
  • 你的想法完全正确。您可能想查看一些 Apache Nutch 的源代码;这是一个搜索引擎。索引部分获取网页,然后扫描它们的链接(并且还做了很多其他的事情)。您想要的代码将相似但不相同。
  • 你是如何解决这个问题的?你能得到你想要的吗
  • @Clara_57S 是的,我使用了 jsoup,它为我解决了问题。
  • 但它不能执行javascript。

标签: java javascript html-parsing jsoup


【解决方案1】:

This GitHub project 使用 jSoup 执行此操作。已经存在就不用再写了!

编辑:我制作了此类的improved 版本,并添加了新功能:

它可以:

  • 从链接或内联 CSS 中提取 URL,例如。用于背景图像,并下载并保存它们。

  • 它对所有文件(图像、脚本等)进行多线程下载

  • 提供有关进度和错误的详细信息。

  • 可以获取嵌入在 HTML 文档中的 HTML 框架,也可以获取嵌套框架。

一些注意事项:

  • 使用JSoupOkHttp,因此您需要拥有这些库。

  • GPL 许可,反正现在。

【讨论】:

    【解决方案2】:

    基本上,你可以用 Jsoup 做到这一点:

     Document doc = Jsoup.connect("http://rabotalux.com.ua/vacancy/4f4f800c8bc1597dc6fc7aff").get();
             Elements links = doc.select("link");
             Elements scripts = doc.select("script");
            for (Element element : links) {
                  System.out.println(element.absUrl("href"));
            }
            for (Element element : scripts) {
                  System.out.println(element.absUrl("src"));
            }
    

    图片和所有相关资源等等。

    但是如果您的网站使用 javaScript 创建了一些元素,Jsoup 将跳过它,因为它无法执行 javaScript

    【讨论】:

    【解决方案3】:

    几年前我遇到过类似的问题,我们使用了与您计划完全相同的机制。解析 html 内容并将相对路径转换为绝对路径,并且我们使用多个线程同时运行并检索图像、java 脚本等以进行性能优化。我不知道它是否应该像我们那样做,但最终它对我们有用。:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多