我需要帮助来解决问题.我需要一个程序,给定一个站点,找到并提取"主"图片,即代表网站的图片.(说它是最大的或第一张图片有时但不总是如此).
我该怎么做呢?有没有可以帮助我的图书馆?谢谢!
mqc*_*hen 10
选项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并测量它们的大小.尺寸最大的那个可能是网站的主要形象.
另一种解决方案是首先提取用于社交媒体共享的元标记,如果它们存在,您很幸运,否则您仍然可以尝试其他解决方案。
<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">
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 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);
Run Code Online (Sandbox Code Playgroud)