1

我需要从网站中提取所有图像。直到现在我用

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

与 Jsoup。但我意识到它可能会丢失一些图像,例如在css 中定义的该站点中的顶部图像。

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

4

4 回答 4

2

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

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

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

我认为最好的方法是使用浏览器的开发者控制台(发回我对你之前问题的回答)。在控制台中,您可以执行 javascript 来遍历 DOM 树中的所有元素,并获得一个 url 列表,您可以稍后复制并使用某些服务器端脚本加载图像。

于 2013-08-17T10:00:25.277 回答
1

使用 .. 获取 CSS 中图像的 URLjava从这个堆栈溢出问题中找到答案。使用Java获取CSS文件中图像的URL?

或者

你可以这样想一些逻辑https://gist.github.com/parkerl/1771976

于 2013-08-17T18:32:33.797 回答
1

Jsoupbackground-image在提取中定义的 s 时对您没有任何帮助css

检查这个以获得解决方案。

于 2013-08-17T14:45:59.180 回答
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')
于 2013-08-17T10:03:47.270 回答