【问题标题】:How to find and extract "main" image in website如何在网站中查找和提取“主”图像
【发布时间】:2013-08-18 13:39:36
【问题描述】:

我需要帮助来解决问题。我需要一个程序,给定一个站点,找到并提取“主要”图片,即代表该站点的图片。 (说它是最大第一图片有时但并不总是正确的。

我应该如何处理这个问题?有没有图书馆可以帮助我解决这个问题? 谢谢!

【问题讨论】:

标签: java html


【解决方案1】:

选项 1

您可以结帐Goose。它的作用类似于 Pocket 和 Readability 的作用,即尝试使用一组启发式方法从给定网页中提取主要文章。它显然也可以从那篇文章中提取主图像,但它有点偶然,所以每次都有 60% 的时间它工作。

它曾经是一个 Java 项目,但被重写为 Scala。

来自自述文件

Goose 会尝试提取以下信息:

  • 一篇文章的正文
  • 文章主图
  • 文章中嵌入的任何 Youtube/Vimeo 电影
  • 元描述
  • 元标记
  • 发布日期

在这里试试:http://jimplush.com/blog/goose


选项 2

您可以使用 Java 包装器(例如 GhostDriver)来运行无头浏览器,例如 PhantomJS。然后,获取网站并找到具有最大尺寸的img 元素。 This GhostDriver test case 展示了如何在 DOM 中查询元素并获取其渲染大小。


选项 3

使用像 jsoup 这样的库来帮助您解析 HTML。然后从所有img 标签中获取src 属性的值。请求您为图像找到的每个 URL 并测量它们的大小。尺寸最大的可能是网站的主图片。

【讨论】:

  • 感谢您的回答。问题是,它说,“Goose 是用于处理单个文章,而不是主页”,这与我需要的相反。
  • @nodwj 我已经更新了我的答案,提出了两个可能的方法的新建议。
【解决方案2】:

另一个解决方案是首先提取用于社交媒体共享的元标记,如果它们存在,那么你很幸运,否则你仍然可以尝试其他解决方案。

<meta property="og:image" content="http://www.example.com/image.jpg"/>
<meta name="twitter:image" content="http://www.example.com/image.jpg">
<meta itemprop="image" content="http://www.example.com/image.jpg">

如果你使用 JSOUP,代码会是这样的:

    String imageUrlOpenGraph = document.select("meta[property=og:image]").stream()
            .findFirst()
            .map(doc -> doc.attr("content").trim())
            .orElse(null);

    String imageUrlTwitter = document.select("meta[name=twitter:image]").stream()
                .findFirst()
                .map(doc -> doc.attr("content").trim())
                .orElse(null);

    String imageUrlGooglePlus = document.select("meta[itemprop=image]").stream()
                .findFirst()
                .map(doc -> doc.attr("content").trim())
                .orElse(null);

【讨论】:

    【解决方案3】:

    您可以使用embedly 之类的服务。在许多其他信息中,它们允许您提取任何页面的主图像。特别适用于文章。你可以试试here

    【讨论】:

      【解决方案4】:

      你需要人工智能来做到这一点,即计算机视觉。 它太大了,无法回答。 This link might help

      如果您是一位具有概率和贝叶斯规则经验的数学家,那么您可以学习名为图像处理和计算机视觉的单元。

      如果您正在寻找想要使用的可用软件check this out...

      This stackoverflow thread might help...

      有一个名为moodstocks 的软件可能会有所帮助。

      【讨论】:

      • 有没有更简单的启发式方法? (即使有一定的准确性成本?)
      • 不,伙计,接受这个事实。您认为没有智能怎么能检测图像?
      • 让我更清楚地说明我的问题:我需要帮助来创建所谓的智能 (AI),我的目标是一个相当简单且简短的算法,即使不是 100% 准确。
      【解决方案5】:

      ImageResolver 可以为您做到这一点,无需服务器端交互,除了一个小的代理脚本。

      【讨论】:

        猜你喜欢
        • 2020-07-13
        • 2013-08-19
        • 2017-05-14
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2021-08-10
        • 1970-01-01
        相关资源
        最近更新 更多