2013-08-16 32 views
6

我需要幫助解決問題。我需要一個程序,在給定網站的情況下,找到並提取「主要」圖片,即代表網站的圖片。 (要說這是最大第一個圖片有時但並非總是如此)。如何在網站中查找並提取「主」圖像

我該如何解決這個問題?有沒有可以幫助我的圖書館? 謝謝!

+1

[jsoup](http://jsoup.org/).... – MadProgrammer

回答

9

OPTION 1

你可以結帳Goose。它與Pocket和Readability的功能類似,即嘗試使用一組啓發式從給定網頁中提取主文章。它顯然也可以從那篇文章中提取主要圖像,但這有點讓人失望,所以每次都有60%的時間工作。

它曾經是一個Java項目,但改寫爲Scala。

自述

鵝會嘗試提取以下信息:

    的文章
  • 正文
  • 文章的主要圖像
  • 任何的Youtube/Vimeo的電影嵌入文章
  • 元描述
  • Meta標籤
  • 發佈日期

嘗試在這裏:http://jimplush.com/blog/goose


OPTION 2

你可以使用Java包裝(例如GhostDriver)用於運行無頭瀏覽器,如PhantomJS。然後,獲取該網站並找到尺寸最大的元素imgThis GhostDriver test case顯示瞭如何查詢元素的DOM並獲取渲染大小。


OPTION 3

使用圖書館像jsoup,可幫助您解析HTML。然後從img標籤中獲取src屬性的值。請求您爲圖像找到的每個URL並測量其大小。尺寸最大的那個可能是網站的主要形象。

+0

感謝您的答案。問題是,它說,「鵝意味着與個別文章,而不是主頁」,這是我所需要的相反。 – nodwj

+0

@nodwj我已經更新了我的答案,提供了兩種可能的方法的新建議。 – mqchen

0

您需要人工智能才能這樣做,即計算機視覺。 它太大,不適合答案。 This link might help

如果你是概率和貝葉斯法則經驗的數學家,那麼你可以採取所謂的圖像處理和計算機視覺單位。

如果您正在尋找可用的軟件要使用check this out...

This stackoverflow thread might help...

有這個軟件叫moodstocks這可能會有幫助。

+0

有沒有更簡單的啓發法呢? (即使有一些精確度的代價?) – nodwj

+0

沒有配偶,接受這個事實。你認爲如何在沒有智能的情況下檢測圖像? –

+0

讓我更明確地提出我的問題:我需要幫助創建所謂的智能(AI),而且即使不是100%準確,我的目標也是一個相當簡單和短的算法。 – nodwj

0

您可以使用像embedly這樣的服務。在許多其他信息中,它們允許您提取任何頁面的主圖像。對於文章特別有效。你可以試試here

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"> 

如果您yousing 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); 
0

ImageResolver可以爲你做的,而不需要服務器端交互的,除了少量代理腳本。

相關問題