2011-04-09 182 views
5

首先,這不是一個關於如何刮網站的問題。我完全意識到可用於抓取的工具(css_parser,nokogiri等,我使用Ruby來進行抓取)。如何從網站上刮取徽標?

這是一個關於最好的解決方案的最重要的問題,它可以將網站的標識標識爲僅以網站地址開頭的網站。

這兩種方案我已經開始創造有這些:

  1. 使用谷歌AJAX API來做到這一點的作用範圍是有問題的網站的圖片搜索,與查詢「標誌」,並搶第一個結果。大約30%的時間,這會得到標誌,我想說。
  2. 上面的問題是,Google似乎並不關心CSS圖像替換徽標(即H1圖像替換爲徽標)。我暫時想出的解決方案是下拉所有CSS文件,掃描url()聲明,然後在文件名中查找單詞標題或徽標。

解決方案二有問題,因爲所有爲網站編寫CSS的人都有很多特質。他們在文件名中使用標題而不是徽標。有時文件名稱是隨機的,對徽標沒有提及。其他時候,這只是錯誤的形象。

我意識到我可能可能能夠用某種機器學習做某事,但是我對客戶端有點期限,需要一些相當有用的功能。因此,儘管如此,如果任何人有任何「開箱即用」的想法,我很樂意聽到它。如果我可以創建一個運行良好的解決方案,我計劃對任何其他感興趣的各方開放圖書館:)

謝謝!

+0

另外,我想補充一點,我這樣做是爲了減少對我的客戶手動圖像上傳過程。我們將獲得數千條記錄,我希望他們能夠儘可能少地手動上傳。謝謝! – 2011-04-09 20:11:08

+0

關於做類似的東西結合你提出的其中一個搜索什麼:谷歌搜索僅限於根URL識別網站上的多個頁面。掃描兩頁或三頁圖像,並找到所有搜索頁面共有的內容。如果所有頁面都有多個結果,那麼您需要制定某種選擇標準,或許按照大小排列,也許按照頁面內的順序排列......但是我認爲這樣做有點反覆試驗,看看哪些工作有效最好。然後,您可以比較兩種方法的結果,如果他們同意,也許是徽標... – 2011-04-09 20:19:25

+0

這似乎是一個很好的解決方案!我相當新(雖然長期潛伏者),但爲什麼不把它作爲答案呢? – 2011-04-09 20:23:46

回答

2

創建應用程序將爲您提供幫助,但我相信最終會涉及一些手動工作。這是我會做的。

  • 讓您的應用程序在數據庫中存儲大於指定維度的網站上所有圖像的鏈接,以便您可以清除小圖標。
  • 然後你可以設置一個表單來訪問這些結果。您可能需要設置數據庫表以存儲網址和URL與圖像鏈接之間的關係。

即使我們有可能寫一個應用程序來真正弄清楚它是否是一個標誌,看起來好像是一個大量的代碼。最終,它可能會比上述更多,但是你必須考慮到人類可以更快地直觀地解析結果,然後再花時間編寫和測試複雜的代碼。

+1

哦。這很好,但我建議不要下載和存儲每個圖像(我們至少在談論10,000個網站,每個圖像都必須有大量圖像),而是將url保存到所有這些圖像和ajax他們進入管理員的形式...相同的概念,只是方式少存儲在我們的服務器上。 – 2011-04-09 20:21:28

+0

這也乞求被機械土耳其人耕種:D謝謝! – 2011-04-09 20:21:49

+0

@Keith Hanson,既然你正在談論大量的網站,爲什麼不創建一個數據庫來存儲鏈接到找到的圖像。每個鏈接都可以屬於數據庫中網站的網址。然後,您可以打開bestbuy.com的詳細信息,其中列出了該頁面上特定網站的鏈接或圖像。 – 2011-04-09 20:24:33

4

我不得不爲以前的項目找到〜10K個網站的標識,並嘗試了與URL中「標識」提取圖像相同的技術。我的變化是我加載了webkit中的每個網頁,以便所有圖像都從CSS或JavaScript加載。這項技術爲我提供了約40%的網站標識。

然後我考慮創建一個類似Nick的應用程序,爲其他網站手動選擇徽標,但是我意識到將這些給予某人便宜(我通過Elance找到的人)以便手動執行該工作會更具成本效益。

所以我建議不要打擾一個完全的技術解決方案妥善解決這 - 外包的體力活。

0

我用C#控制檯應用程序與HtmlAgilityPack NuGet包從過度600+站點刮徽標。 算法是,你能在網址有「標誌」的所有圖像。 你將這種提取過程中與面臨的挑戰是:

  • 相對圖像
  • 基本URL是CDN HTTP/HTTPS(如果你不知道 協議你犯了一個請求之前)
  • 的圖像具有?或&與查詢字符串 在年底

帶着這個東西,我得到了成功的約70%,但一些圖片沒有實際的標誌。

1

還沒有解決這個問題的另一種簡單的方法是讓所有的葉子節點並獲得第一

<a><img src="http://example.com/a/file.png" /></a> 

你可以查找的項目獲得的淨HTML葉節點或使用正則表達式來獲取所有的HTML標籤。

+0

我認爲這是一個很好的答案,適用於大多數網站。 – bert 2017-06-10 10:44:11