使用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许可,现在无论如何。