我需要从网站中提取所有图像。直到现在我用
Elements images = node.select("img");
与 Jsoup。但我意识到它可能会丢失一些图像,例如在css 中定义的该站点中的顶部图像。
有没有一种简单的方法可以不错过这些图像,并将页面中的所有图像作为 Jsoup 元素获取?请注意,“没有简单的方法可以做到这一点”也是一个有效的答案,我只是想知道这一点。谢谢!
如果您只需要从该站点获取所有图像,则首先需要获取所有标签,然后从该站点上加载的 css 获取所有背景图像。但这仍然不是所有图像,因为有些图像可以由 javascript 加载(或者某些标签或 css 可以用 javascript 更改)。
为了确保在浏览器加载网站时获得完全加载网站所需的一切,获取 DOM 树,对其进行迭代,检查 DOM 中每个元素中的 css 属性以获取背景图像,并从标签中提取所有图像。
我不确定 Jsoup 是否可以做到这一点。可能它不会考虑javascript甚至css。它似乎只是 html 解析器。
我认为最好的方法是使用浏览器的开发者控制台(发回我对你之前问题的回答)。在控制台中,您可以执行 javascript 来遍历 DOM 树中的所有元素,并获得一个 url 列表,您可以稍后复制并使用某些服务器端脚本加载图像。
使用 .. 获取 CSS 中图像的 URLjava
从这个堆栈溢出问题中找到答案。使用Java获取CSS文件中图像的URL?
或者
你可以这样想一些逻辑https://gist.github.com/parkerl/1771976
Jsoup
background-image
在提取中定义的 s 时对您没有任何帮助css
。
检查这个以获得解决方案。
以下代码将用于获取除 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')