2012-06-03 92 views
2

最好使用python(當前使用urllib和BeautifulSoup)給出一個URL。屏幕抓取圖像(即Firefox頁面信息/ Google圖像)

比如我想湊這個頁面上的主照片:http://www.marcjacobs.com/marc-jacobs/womens/bags-and-accessories/c3122001/the-single#?p=1&s=12

在Firefox下的工具>頁面信息>媒體列出了所有的可見光圖像,包括鏈接到我要搶圖像( http://imagesec.mj.ctscdn.com/image/336/504/6ace6aac-c049-4d7e-9465-c19b5cd8e4ac.jpg

兩個相互關聯的問題:

  1. 如果我從 Firefox的工具檢索到的圖像的路徑不是在HTML文檔中發現了一個查看源代碼...有沒有什麼辦法可以找回這個 路徑沒有通過Firefox頁面信息?也許通過 Python和/或Javascript/JQuery?
  2. 我試圖獲得「橙色」的產品的照片,並注意頁面總是默認加載黑色

的工作的例子可能是谷歌「購物」如果鍵入,此產品的名稱並選擇顏色,圖像以正確的顏色(來自完全相同的頁面)顯示在搜索結果中。

基本上,我想能夠從大多數購物網站刮顏色和風格/變化特定的圖像。

選擇正確的顏色好像比較複雜,在這種情況下我會滿足於僅僅在黑色作爲主產品圖像現在..

到目前爲止,我已經試過基於IMG高度標記選擇圖像,也試圖在沒有高度/寬度標籤時讀取尺寸......但對我而言,必須有更好的方法。

回答

-1

這可能有點複雜,但是在這種特殊情況下工作的大多數解決方案都差不多。

首先,讓我告訴你爲什麼使用美麗的湯或xlml不起作用。您需要檢索一些僅在您點擊橙色包包縮略圖後纔可用的信息,對吧?這是使用Javascript加載的,因此,美麗的湯和朋友不會使用橙色的包圖像(因爲它們不解析Javascript,也不解析解析樹中沒有的元素)。 所以這是一個死亡的結局。

但是,還有其他的屏幕抓取工具,如Selenium或PhantomJS。我已經測試並且工作得很好。他們基本上集成了瀏覽器,所以他們顯然能夠管理JavaScript。我不知道你是否需要從你的服務器自動刪除它,或者你想要隨意啓動scraping過程。使用Selenium(在你告訴它你要打開哪個頁面,你想要點擊什麼元素等等)之後,你會看到你的瀏覽器自己做了所有這些事情。還有其他選項可用,例如使用無頭瀏覽器。在我看來,這是非常強大的,但它可以變得相當複雜,讓它工作。

更簡單的解決方案是使用PhantomJs。它和Selenium很相似,不過正如其名稱所示,您可以通過Javascript給出說明(因爲您已經在處理Web元素,所以可以更舒適一點)。我建議你使用CasperJSIt eases the process of defining a full navigation scenario and provides useful high-level functions, methods & syntactic sugar for doing common tasks...

讓我給一些感受是什麼樣子:

casperFunction = function(){ 
    var casper = require('casper').create({ 
     verbose: true 
    }); 

    casper.start('yourwebpage'); // loading the webpage 

    casper.then(function(){ // after loading... 
     casper.evaluate(function(){ // get me some element's value 
      document.getElementById('yourelement').value 
     }); 

    }); 

    casper.then(function(){ // after that, click on this other element 
     this.click('#id_of_other_element'); 
    }) 

    casper.wait(7000); // wait for some processing... this can be quite 
         // useful if you need to wait a few seconds in 
         // order to retrieve your orange bag later 

    casper.run(); // actually runs the whole thing 

有你有你最需要完成任務的事情。

順便說一下,讓我提醒你,通常需要獲得許可才能找回那種東西。

希望有所幫助。

+0

忘了提及你想要元素的背景屬性。您鏈接的頁面不使用img標籤。 –

+0

謝謝!我會嘗試這個併發布任何更新。嗯,即使你連接到網站,也需要許可嗎?我只打算將它們用作縮略圖..無論如何我會仔細研究它。 此外,我希望我可以刪除在谷歌搜索點擊橙色縮略圖的步驟。不知道他們是如何自動從同一頁面檢索該圖像的。也許這是最高機密,因爲我還沒有看到任何其他例子:) – Miu

+0

沒問題。我擔心你幾乎總是需要許可。詢問他們,如果他們看起來不太熱心,你可以提供鏈接或類似的東西(或支付)。至於谷歌搜索的事情,請記住,網頁使用技術,以允許網絡爬蟲訪問他們的內容。讓我糾正自己:他們使用img標籤,他們指向CDN,所以他們可能會讓Google抓取它。然而,我只是搜索了一些描述和顏色,但我找不到通過Javascript生成的相同圖像。 –