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

时间:2013-08-16 07:49:00

标签: java html

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

我该如何处理?有没有可以帮助我的图书馆? 谢谢!

5 个答案:

答案 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)

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

答案 4 :(得分:0)

除了小代理脚本之外,

ImageResolver可以为您完成此操作而无需服务器端交互。