9

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

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

4

5 回答 5

11

选项1

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

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

从自述文件

Goose 将尝试提取以下信息:

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

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


选项 2

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


选项 3

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

于 2013-08-16T08:00:39.700 回答
5

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

<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);
于 2016-01-27T11:52:34.430 回答
1

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

于 2014-01-30T20:57:36.307 回答
0

你需要人工智能来做到这一点,即计算机视觉。它太大了,无法回答。此链接可能会有所帮助

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

如果您正在寻找要使用的可用软件,请查看...

这个stackoverflow线程可能会帮助......

有一个叫做moodstocks的软件可能会有所帮助。

于 2013-08-16T07:54:14.923 回答
0

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

于 2016-09-26T07:18:51.960 回答