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

时间:2012-04-12 08:27:34

标签: java javascript html-parsing jsoup

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

This GitHub project使用jSoup执行此操作。如果它已经存在,则无需再次编写它!

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

它可以:

  • 从Linked或Inline CSS中提取网址,例如。用于背景图像,并下载&除了那些。

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

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

  • 可以在HTML文档和嵌套框架中嵌入HTML框架。

一些警告:

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

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