【问题标题】:How to get the display/visual image size (not the actual image size) in JSOUP?如何在 JSOUP 中获取显示/视觉图像大小(不是实际图像大小)?
【发布时间】:2013-09-14 14:13:03
【问题描述】:

我需要获取 html 页面中图像的显示/视觉图像尺寸。我正在使用 JSOUP。

我可以通过将图像作为流检索来获得实际的图像尺寸,但我不需要图像的实际大小,而只需要显示大小。

无法保证img标签是否包含html的height和width属性,所以我不能依赖getAttribute方法。

如果我能得到任何建议,那将是很大的帮助。

提前致谢。

【问题讨论】:

    标签: java html web-scraping jsoup


    【解决方案1】:

    这是一项不平凡的任务。

    要获得适用于任何页面(包括动态添加的内容)的真实图像大小,需要使用无头浏览器并在文档完全加载后使用 javascript 查询显示大小。如果可以注入 jQuery javascript 框架,那么 jQuery.width() jQuery.height() 将分别返回渲染的宽度和高度。执行相同操作的纯 javascript 函数是特定于浏览器的。

    假设图像不是动态添加或更改的,解析查找就足够了:

    1. html 的宽度或高度属性直接在 html 标签上设置,如<img width="150px" height="100px">
    2. 样式属性中设置css宽度或高度像<img style="width: 150px; height: 100px;">,最后
    3. 解析链接到文档中的所有 css 文件,并通过 id 和 class <img id="some-image-id" class="some-class"> 匹配图像标签的 css 规则找到一些看起来像这样的 css 规则 #some-image-id, .some-image-class { width: 150px; height: 100px; }

    【讨论】:

    • 是的,看起来就是这样。下面的@superbob 也提出了类似的答案。非常感谢。
    【解决方案2】:

    JSOUP 只会为您提供 HTML 中的内容,因此您必须依赖标记中的内容(img 标记属性)。 实际大小取决于浏览器的显示方式,具体取决于供应商。

    【讨论】:

    • 感谢您的回复,我明白这一点..但我想知道是否有其他替代方法可能
    • 您必须手动编写逻辑代码,例如: 1) 搜索属性。 2)如果没有找到,从img流中搜索。 3)如果没有找到,获取默认大小。这就是浏览器的作用
    • 是的,但是如果尺寸来自 css 类.. 我想如果图像大小由父容器(div 高度/宽度)控制,那么通过 JSOUP 很难找到这种情况处理..请分享您对这些的想法。
    • 没有简单的解决方案。您可以使用 Web 浏览器引擎并使其呈现页面,然后询问其图像结果大小。但是我不知道Java中有什么好的网络浏览器引擎,你可以试试Cobra,但它似乎已经过时了。一个不错的是 Phantom.JS,但它是在 Javascript 中......
    • 同意...似乎这是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多