从网站中提取所有图像

时间:2013-08-17 09:42:44

标签: java html css dom jsoup

我需要从网站中提取所有图像。到目前为止我用过

Elements images = node.select("img");

使用Jsoup。但我意识到它可能会遗漏一些图像,例如在this网站中的顶部图像,这是在css中定义的。

有没有一种简单的方法可以不错过这样的图像,并获得页面中的所有图像作为Jsoup元素? 请注意,“没有简单的方法可以做到这一点”也是一个有效的答案,我只想知道这一点。谢谢!

4 个答案:

答案 0 :(得分:2)

如果您只需要从网站获取所有图像,则首先需要获取所有标记,然后获取本网站上加载的css的所有背景图像。但是这仍然不是所有图像,因为有些可以通过javascript加载(或者某些标签或css可以通过javascript更改)。

为了确保在浏览器加载网站时获得完全加载网站所需的一切,获取DOM树,迭代它,检查DOM中每个元素的css属性以获取背景图像,并从中提取所有图像标签

我不确定Jsoup是否能做到这一点。可能它不会考虑javascript,甚至可能是css。它似乎只是html解析器。

我认为最好的方法是使用浏览器的开发者控制台(发送回我之前问题的答案)。在控制台中,您可以执行javascript以迭代DOM树中的所有元素,并获取一个URL列表,您可以稍后复制这些URL并用于通过某些服务器端脚本加载图像。

答案 1 :(得分:1)

Jsoup在提取background-image中定义的css时对您没有任何帮助。

检查this是否有解决方案。

答案 2 :(得分:1)

使用java在CSS中获取图像的URL ..从此堆栈溢出问题中找到答案。 Get URL of images in CSS file using Java?

您可以考虑像https://gist.github.com/parkerl/1771976

这样的逻辑

答案 3 :(得分:0)

以下代码可用于获取除css中定义的图像之外的大多数图像。 通过css的图像路径是相对于css文件itslef

的路径
function img_find() {
    var imgs = document.getElementsByTagName("img");
    var imgSrcs = [];

for (var i = 0; i < imgs.length; i++) {
    imgSrcs.push(imgs[i].src);
}

return imgSrcs;
}

您也可以尝试

window.getComputedStyle(document.getElementByTag("img"),null).getPropertyValue('background-image')