天天看點

《python爬蟲實戰》:爬取圖檔

《python爬蟲實戰》:爬取圖檔

上篇博文講解了關于爬取糗事百科上面的段子的例子程式,這篇博文,主要的目的就是爬取任何不用登陸的網站上的圖檔。還是以糗事百科為例。

例子:爬取糗事百科上的圖檔

實作代碼如下:

#encoding=utf-8
#功能:爬取糗事百科上面的圖檔
import urllib2
import urllib
import re
#raw_input是python的一個内置函數,通過讀取控制台的輸入與使用者實作互動。
#input也可以讀取控制台的輸入與使用者實作互動,但是input和raw_input由一定的差異,
#例如:raw_input将控制台上所有的輸入均作為字元串(即使全是數字組合)來進行處理,而input對輸入有一定的要求,如果輸入的是字元串,則一定要用引号
#從控制台輸入一個url

#定義一個函數,得到内容
def getContent(content):
    #利用正則來進行比對
    pattern=re.compile(r'src="(.*?)" alt=')
    items=re.findall(pattern,content)
    count=
    for item in items:
        count+=#python中沒有++運算
        urllib.urlretrieve(item,"%s.jpg"  % count)

url=raw_input("raw_input:")
try:
    user_agent="Moizlla/5.0 (Windows NT/6.1)"
    headers={"User-Agent":user_agent}#請求頭
    request=urllib2.Request(url,headers=headers)
    response=urllib2.urlopen(request)
    content=response.read()
    getContent(content)#調用getContent函數進行比對
except urllib2.URLError,e:
    if hasattr(e,"reason"):
        print e.reason
           

上面唯一的難點在于比對圖檔的正規表達式,其它的代碼都比較簡單,相信有一點點爬蟲基礎都對這幾行代碼比較熟悉。

關于正規表達式時如何來的,我的經驗就是如下:

第一步:找到你想爬圖檔的網頁,并求浏覽器打開,推薦用IE
第二步:按下鍵盤F12
第三步:在html代碼中,圖檔是以什麼樣的格式出現在html代碼中的。然後根據格式提取出正規表達式即可。
           

根據上面的三部曲,在糗事百科的網頁上,圖檔在html代碼中的格式如下:

《python爬蟲實戰》:爬取圖檔

根據此格式,提取出正規表達式如下:

這樣,一個圖檔的正規表達式就完成了。

這裡,分享一個經驗,當我們學習别人的代碼時,正規表達式,自己一定要根據自己想爬取的網頁自己去提取,如果自己提取不了,也要根據自己的目的網頁驗證下,特别是當學習别人的代碼提取相同的網頁時不能成功時,越應該如此。

程式下載下傳點選這裡:https://github.com/wojiushimogui/get_tieba