python批次爬取網路圖片

上篇透過python爬取了一篇網路小說,初步瞭解了爬蟲的四步流程,本文稍微擴充套件一點,試著從網頁中爬取出多個圖片,具體來看看:

我們今天試著從下面圖1的網頁上將所有圖片都爬取出來,放在一個指定的資料夾裡。

python批次爬取網路圖片

圖1 目標網頁

還是按爬蟲4流程:

發出請求——獲得網頁——解析內容——儲存內容

1、發出請求

1)找到網頁地址:

在網頁上右鍵單擊“審查元素”,彈窗裡選中Network面板,從左側name列表裡逐個選擇專案,觀察右側Preview面板下的內容,發現出現下圖2中的樣式時,就是我們要的第一小步目標。

python批次爬取網路圖片

在圖3所示的Headers面板下找到網頁地址URL

python批次爬取網路圖片

圖3

Request URL:

https://m。gmw。cn/toutiao/2020-02/16/content_123107586。htm?tt_group_id=6793905493262729736

2)找到網頁中圖片地址:

由於網頁上的圖片都是有單獨網址的,與網頁的網址不同,所以我們需要在網頁程式碼裡找到圖片的網址資訊。繼續查詢Preview面板下的網頁程式碼,圖4紅框內所示即為網頁裡插圖圖片的地址,這就是我們爬取圖片真正要用的地址

python批次爬取網路圖片

圖4, 紅方框內為圖片地址

所以,從網頁裡批次爬取圖片,實際步驟是:

發出請求(網頁地址)——獲得網頁——解析內容(得到圖片地址)——向圖片地址發出請求(迴圈)——獲得網頁——解析內容(得到圖片)——儲存內容

獲得圖片地址的程式碼為:

url = ‘https://m。gmw。cn/toutiao/2020-02/16/content_123107586。htm?tt_group_id=6793905493262729736’rep = requests。get(url)# 發出訪問請求,獲得響應res = BeautifulSoup(rep。content, ‘lxml’)# 解析響應,獲得網頁內容img_url = res。find_all(‘p’, style=“text-align:center;”)# 解析網頁內容,獲得全部圖片網址

此時,我們試著檢驗一下獲得的圖片地址:

for im in img_url: jpgurl = im。find(‘img’)[‘src’] print(jpgurl)

結果為圖5所示:

python批次爬取網路圖片

圖5 網頁中所有圖片地址

2、批次獲得網頁

在上面的for迴圈裡,向圖片地址發生請求:

for im in img_url: jpgurl = im。find(‘img’)[‘src’] r = requests。get(jpgurl)

3、解析獲得圖片

由於圖片地址裡沒有其他內容,只有圖片,解析很簡單:直接取r。content就能得到圖片。

for im in img_url: …… r = requests。get(jpgurl) jpg = r。content

4、儲存圖片

for im in img_url: …… jpg = r。content nam = jpgurl[-23:]# 從圖片網址裡提取最後23個字元,當圖片名稱,也可以自己定義,不要重複即可 f = open(set_path() + nam, ‘wb’)# 從set_path()函式返回一個資料夾路徑,與圖片名稱組合成檔案的儲存地址 f。write(jpg)# 將圖片寫入檔案

set_path()函式返回一個預設儲存檔案的資料夾,如果預設的資料夾不存在,就自動建立。

def set_path(): path = r‘e:/python/jpg’ if not os。path。isdir(path): os。makedirs(path) paths = path+‘/’ return(paths)

執行後開啟對應資料夾,圖片已經完成下載,如圖6:

python批次爬取網路圖片

圖6 爬取到的圖片

至此,批次爬取網頁圖片就完成了。

總結:

本文的爬取過程,比常說的爬蟲4步驟多了好幾步,其實,本質上還是萬變不離其宗的4步流程。本例只不過是相當於把兩套爬取流程進行了巢狀,少了一次儲存內容的過程而已。關鍵是透過爬取獲得網址後,再次爬取新網址裡的內容,真正的爬取大多是透過這種巢狀實現的。