2015-06-09 261 views
2

我很新,BeautifulSoup。我想從http://www.bing.com/images?q=owl打印圖像鏈接:從頁面獲取特定圖像

redditFile = urllib2.urlopen("http://www.bing.com/images?q=owl") 
redditHtml = redditFile.read() 
redditFile.close() 

soup = BeautifulSoup(redditHtml) 

productDivs = soup.findAll('div', attrs={'class' : 'dg_u'}) 
for div in productDivs: 
    print div.find('a')['t1'] #works fine 
    print div.find('img')['src'] #This getting issue KeyError: 'src' 

但這僅給出標題,而不是圖像源 這有什麼錯?

編輯: 我編輯了我的源代碼,仍然無法獲取圖像url。

回答

1

秉使用一些技術來阻止自動刮刀。我試圖打印

div.find('img') 

,發現他們發送源屬性名SRC2,所以下面應該工作 -

div.find('img')['src2'] 

這是爲我工作。希望能幫助到你。

+0

謝謝!也很有趣。你怎麼知道他們發送的源代碼是'src2' – nlper

+1

正如我所說的,我嘗試過'print div.find('img')',它打印了整個img標籤的html。 –

+0

感謝任何負責人http://stackoverflow.com/questions/30734483/get-div-attribute-val-and-div-text-body – nlper

1

如果您打開瀏覽器開發工具,您會看到向http://www.bing.com/images/async端點發出了附加的異步XHR請求,其中包含圖像搜索結果。

導致你有3個主要選項:

  • 模擬你的代碼XHR請求。你可能想要使用比urllib2更適合人類的東西;見requests module。這將被稱爲「低級」方法,直到裸機和網站特定的實施,這將使這個選項不可靠,困難,「重」,錯誤提示和脆弱

  • 自動化一個真正的瀏覽器使用selenium - 留在高層。換句話說,你不關心如何檢索結果,請求是什麼,需要執行什麼樣的JavaScript。您只需等待搜索結果出現並提取它們即可。

  • 使用Bing Search API(這也許應該選項#1)

+0

感謝您的回答,第1(限制問題)和第3(工作 - 但阻止問題)試用。不確定第二場。我很感謝你分享你的知識,讓我知道哪個更可靠,並且擁有長壽命 – nlper