使用java代码获取完整的网页

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

我是否正确的任何建议。 或者有没有简单的方法来完成这项任务?

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

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

这个GitHub项目使用jSoup执行此操作。 如果它已经存在,则无需再次写入!

编辑:我做了这个类的改进版本,并添加了新function:

它可以:

  • 从Linked或Inline CSS中提取URL,例如。 用于背景图像,并下载和保存。

  • 它执行所有文件的multithreading下载(图像,脚本等)

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

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

一些警告:

  • 使用JSoup和OkHttp ,所以你需要拥有这些库。

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