如何在网站中查找和提取"主要"图像

nod*_*dwj 8 html java

我需要帮助来解决问题.我需要一个程序,给定一个站点,找到并提取"主"图片,即代表网站的图片.(说它是最大的第一张图片有时但不总是如此).

我该怎么做呢?有没有可以帮助我的图书馆?谢谢!

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并测量它们的大小.尺寸最大的那个可能是网站的主要形象.


mmx*_*x73 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">
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)