2014-06-23 106 views
0

我正在嘗試從維基百科頁獲取重要圖像,而不是縮略圖或其他gif,並使用以下代碼。然而,「img」的長度是「0」。有關如何糾正它的任何建議。使用BeautifulSoup從URL獲取圖像

代碼:

import urllib 
import urllib2 
from bs4 import BeautifulSoup 
import os 

html = urllib2.urlopen("http://en.wikipedia.org/wiki/Main_Page") 

soup = BeautifulSoup(html) 

imgs = soup.findAll("div",{"class":"image"}) 

此外,如果有人能在細節,如何通過網頁查看「源元素」使用的findAll解釋。那將會很棒。

回答

3

頁面上的a標籤有一個image類,而不是div

>>> img_links = soup.findAll("a", {"class":"image"}) 
>>> for img_link in img_links: 
...  print img_link.img['src'] 
... 
//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Stora_Kronan.jpeg/100px-Stora_Kronan.jpeg 
//upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Christuss%C3%A4ule_8.jpg/77px-Christuss%C3%A4ule_8.jpg 
... 

,或者甚至更好,使用a.image > imgCSS selector

>>> for img in soup.select('a.image > img'): 
...  print img['src'] 
//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Stora_Kronan.jpeg/100px-Stora_Kronan.jpeg 
//upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Christuss%C3%A4ule_8.jpg/77px-Christuss%C3%A4ule_8.jpg 
... 

UPD(使用urllib.urlretrieve下載圖像):

from urllib import urlretrieve 
import urlparse 
from bs4 import BeautifulSoup 
import urllib2 

url = "http://en.wikipedia.org/wiki/Main_Page" 
soup = BeautifulSoup(urllib2.urlopen(url)) 
for img in soup.select('a.image > img'): 
    img_url = urlparse.urljoin(url, img['src']) 
    file_name = img['src'].split('/')[-1] 
    urlretrieve(img_url, file_name) 
+0

由於一噸...是有可能下載圖像.... – LonelySoul

+0

@LonelySoul肯定,檢查'UPD'部分。 – alecxe

1

我在該頁面上看不到任何帶有名爲'圖像'的類的div標籤。

你可以得到所有的圖像標籤,扔掉那些很小的標籤。

imgs = soup.select('img')