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

使用java代码获取完整的网页,java,javascript,html-parsing,jsoup,Java,Javascript,Html Parsing,Jsoup,我想实现一个java方法,它将URL作为输入,并将整个网页(包括css、图像、js(所有相关资源))存储在我的磁盘上。我已经使用JSoupHTML解析器来获取html页面。现在我想实现的唯一选项是使用jsoup获取页面,现在解析html内容,将相对路径转换为绝对路径,然后对javascript、图像等发出另一个get请求,并将它们保存在磁盘上。 我也读过关于html cleaner、htmlunit解析器的文章,但我认为在所有这些情况下,我必须解析html内容以获取图像、css和javascri

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

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

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

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

使用Jsoup执行此操作。如果已经存在,则无需再次写入

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

它可以:

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

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

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

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

一些警告:

  • 使用和,所以您需要这些库

  • 不管怎么说,GPL已经获得许可了


我在SO上发现了一些类似的问题,但这个问题的答案仍然没有得到回答:(你的想法完全正确。你可能想看看Apache Nutch的一些源代码;这是一个搜索引擎。索引部分获取网页,然后扫描它们的链接(还有很多其他工作)。您想要的代码将相似但不完全相同。您是如何解决此问题的?您能得到您想要的吗want@Clara_57S是的,我使用了jsoup,它为我解决了问题。但是它不能执行javascript。嘿,这个absUrl函数是否只打印只有绝对路径的元素的url。我想获取相对路径,并将它们转换为o绝对路径。Jsoup中是否存在类似的功能,或者我必须手动执行它。从JavaDoc:`String org.Jsoup.nodes.Node.absUrl(String attributeKey)从URL属性获取绝对URL,该属性可能是相对的(即or)。例如:String absUrl=linkEl.absUrl(“href”);如果属性值已经是绝对的(即,它以协议开始,如http://或https://等),并成功解析为URL,直接返回属性。否则,它将被视为相对于元素的baseUri的URL,并使用该URL使其成为绝对值。@blunderboy[link]()谢谢vaccum,我已经读到:)按照你的建议去做,谢谢