如何在android中下载Html页面及其内部文件?
How to download an Html page and its internal files in android?
我正在开发一个需要从 link 下载网页源代码的应用程序,其中包含所有内部文件,如图像、css、javascript .
之后,我需要在网络视图中以离线模式打开此 html,这就是为什么我需要从页面下载所有内容的原因。
我会使用 JSOUP 下载图像,但我不知道如何将它们 link 放入下载的 html。
你能给我一些例子,或者从哪里着手吗?
提前致谢
你可以用 Jsoup 来做。 IMO,这是很多工作。另一方面,你可以考虑 Crawler4j.
他们的网站上有教程。查看 crawling images.
的示例
基本上,您需要做的(以及下面提到的我的应用所做的)是遍历指向其他资产/图像/脚本等的所有参考链接,下载它们,然后更改 HTML 文件指向本地下载的副本。像这样,使用 Jsoup:
找到页面上所有的img
个元素,
从img
元素的src属性中获取图片文件的位置/url(with.attr("abs:src:)
),
将所有这些图像下载到本地目录
将每个图像元素的 src 属性值更改为指向下载图像文件的位置,相对于主 HTML 文件的存储位置,例如 .attr("src", "assets/imagefilename.png"")
.
对页面所需的所有其他资产执行此操作,例如。图片、CSS、脚本、html5 视频等。我还在 CSS(链接和内联)上做了一些正则表达式来提取、下载和重写诸如背景图像引用和 css 之类的东西。网页还有其他链接的东西,例如您可能也需要的网站图标或 RSS 提要。
通过调用 .toString()
并将结果保存到文件,将您的 Jsoup 文档(修改后的 URL 指向您下载的资产版本)保存到文件。
然后您可以在网络视图中打开本地 HTML 文件,假设您已正确完成所有操作,它将显示所有图像和资产,甚至离线。
我实际上写了一个 Android 应用程序,它正是这样做的:将完整的 HTML 文件和所有 CSS/图像/其他资产保存到本地文件/目录,使用 Jsoup。
实际 HTML 页面保存/下载代码参见 https://github.com/JonasCz/SaveForOffline/ for the source, specifically SaveService.java。
注意它是 GPL 许可的,因此如果您使用它(部分),则必须遵守 GPL 许可。
还要注意它做了很多事情,结果相当混乱,(也没有评论或文档......)但它可能对你有帮助。
我正在开发一个需要从 link 下载网页源代码的应用程序,其中包含所有内部文件,如图像、css、javascript .
之后,我需要在网络视图中以离线模式打开此 html,这就是为什么我需要从页面下载所有内容的原因。
我会使用 JSOUP 下载图像,但我不知道如何将它们 link 放入下载的 html。
你能给我一些例子,或者从哪里着手吗?
提前致谢
你可以用 Jsoup 来做。 IMO,这是很多工作。另一方面,你可以考虑 Crawler4j.
他们的网站上有教程。查看 crawling images.
的示例基本上,您需要做的(以及下面提到的我的应用所做的)是遍历指向其他资产/图像/脚本等的所有参考链接,下载它们,然后更改 HTML 文件指向本地下载的副本。像这样,使用 Jsoup:
找到页面上所有的
img
个元素,从
img
元素的src属性中获取图片文件的位置/url(with.attr("abs:src:)
),将所有这些图像下载到本地目录
将每个图像元素的 src 属性值更改为指向下载图像文件的位置,相对于主 HTML 文件的存储位置,例如
.attr("src", "assets/imagefilename.png"")
.对页面所需的所有其他资产执行此操作,例如。图片、CSS、脚本、html5 视频等。我还在 CSS(链接和内联)上做了一些正则表达式来提取、下载和重写诸如背景图像引用和 css 之类的东西。网页还有其他链接的东西,例如您可能也需要的网站图标或 RSS 提要。
通过调用
.toString()
并将结果保存到文件,将您的 Jsoup 文档(修改后的 URL 指向您下载的资产版本)保存到文件。
然后您可以在网络视图中打开本地 HTML 文件,假设您已正确完成所有操作,它将显示所有图像和资产,甚至离线。
我实际上写了一个 Android 应用程序,它正是这样做的:将完整的 HTML 文件和所有 CSS/图像/其他资产保存到本地文件/目录,使用 Jsoup。
实际 HTML 页面保存/下载代码参见 https://github.com/JonasCz/SaveForOffline/ for the source, specifically SaveService.java。
注意它是 GPL 许可的,因此如果您使用它(部分),则必须遵守 GPL 许可。
还要注意它做了很多事情,结果相当混乱,(也没有评论或文档......)但它可能对你有帮助。