我需要帮助来解决问题。我需要一个程序,给定一个站点,找到并提取“主”图片,即代表该站点的图片。 (说它是最大的或第一个图片有时但并非总是如此)。
我该如何处理?有没有可以帮助我的图书馆? 谢谢!
答案 0 :(得分:9)
选项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的库。然后从所有src
标记中获取img
属性的值。请求您为图像找到的每个URL并测量它们的大小。尺寸最大的那个可能是网站的主要形象。
答案 1 :(得分: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);
答案 2 :(得分:0)
你需要人工智能才能这样做,即计算机视觉。 它太大了,无法回答答案。 This link might help
如果您是具有概率和贝叶斯规则经验的数学家,那么您可以选择名为图像处理和计算机视觉的单位。
如果您要查找可用的软件check this out...
This stackoverflow thread might help...
这个名为moodstocks的软件可能有所帮助。
答案 3 :(得分:0)
答案 4 :(得分:0)
ImageResolver可以为您完成此操作而无需服务器端交互。