【发布时间】:2013-08-18 13:39:36
【问题描述】:
我需要帮助来解决问题。我需要一个程序,给定一个站点,找到并提取“主要”图片,即代表该站点的图片。 (说它是最大或第一图片有时但并不总是正确的。
我应该如何处理这个问题?有没有图书馆可以帮助我解决这个问题? 谢谢!
【问题讨论】:
-
jsoup....
我需要帮助来解决问题。我需要一个程序,给定一个站点,找到并提取“主要”图片,即代表该站点的图片。 (说它是最大或第一图片有时但并不总是正确的。
我应该如何处理这个问题?有没有图书馆可以帮助我解决这个问题? 谢谢!
【问题讨论】:
选项 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 并测量它们的大小。尺寸最大的可能是网站的主图片。
【讨论】:
另一个解决方案是首先提取用于社交媒体共享的元标记,如果它们存在,那么你很幸运,否则你仍然可以尝试其他解决方案。
<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);
【讨论】:
你需要人工智能来做到这一点,即计算机视觉。 它太大了,无法回答。 This link might help
如果您是一位具有概率和贝叶斯规则经验的数学家,那么您可以学习名为图像处理和计算机视觉的单元。
如果您正在寻找想要使用的可用软件check this out...
This stackoverflow thread might help...
有一个名为moodstocks 的软件可能会有所帮助。
【讨论】:
ImageResolver 可以为您做到这一点,无需服务器端交互,除了一个小的代理脚本。
【讨论】: