4

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

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

4

3 回答 3

5

基本上,你可以用 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

于 2012-04-12T09:14:19.393 回答
1

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

于 2012-04-12T08:57:50.910 回答
1

这个 GitHub 项目使用 jSoup 执行此操作。如果已经存在就不需要再写了!

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

它可以:

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

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

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

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

一些警告:

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

  • 无论如何,现在是 GPL 许可的。

于 2015-02-03T14:21:56.820 回答