1. 程式人生 > >Python 爬蟲5——爬取並下載網頁指定規格的圖片

Python 爬蟲5——爬取並下載網頁指定規格的圖片

        看完上篇文件之後,我們對於正則表示式已經有了基本的瞭解,其實學習最有效的辦法就是帶著問題和目的,這裡我們假設有一個目標:獲取某個網頁上指定規格的圖片的連結地址,並下載到本地。

一、實現步驟:


2.假設我們要下載該頁面中的幾張大圖,那麼我們需要獲取圖片的url,這其實需要有兩步操作來獲取,一是先知道該圖片的url,二是檢視當前網頁的html內容找到包含此url地址的格式,這樣我們就能通過正則表示式把它篩選出來:

        得到圖片名稱的步驟很簡單,直接右鍵圖片選擇“屬性”即可看到:

        

        複製該地址,關閉屬性介面,按鍵盤F12可檢視當前網頁的html內容,搜尋上面圖片的url地址,可以找到:

 

3.設計正則表示式為:r'src="(.+?\.jpg)" width',這裡width其實是額外的資訊,用來過濾規格之外的其他圖片url,相當於附加篩選資訊。

二、下載圖片儲存到本地:

        其實在urllib庫中已經繼承了這樣的方法,這個方法就是urllib.urlretrieve(),直接將遠端資料載入到本地,例如:

urllib.urlretrieve(imgurl,'%s.jpg' % name)
        imgurl是目標圖片的url地址,name是圖片儲存到本地後的名稱。
        由於獲取到的圖片url可能是多個,所以使用迴圈體呼叫urllib.urlretrieve()方法,將符合規格的圖片載入到本地。

三、實現程式碼:

# encoding: UTF-8
import urllib
import re

def getHtml(url):
    response = urllib.urlopen(url)
    html = response.read()
    return html

#獲取目標url的html內容
html = getHtml("http://tieba.baidu.com/p/4691693167")

#獲取圖片的url並下載到本地
def getImg(html):
    reg = r'src="(.+?\.jpg)" width'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    x=0
    #使用迴圈圖載入圖片
    for imgurl in imglist:
        urllib.urlretrieve(imgurl,'%s.jpg' % x)
        x+=1

#開始載入圖片
getImg(html)
        不難看出,其實關鍵點還是在於目標資訊的篩選正則表示式的設計,上述指令碼執行結果為目標圖片被儲存到本地指令碼所在的目錄下面: