python——爬取圖片(shutter圖片網)


在本爬蟲程序中共有三個模塊:

1、爬蟲調度端:啟動爬蟲,停止爬蟲,監視爬蟲的運行情況

2、爬蟲模塊:包含三個小模塊,URL管理器、網頁下載器、網頁解析器。

(1)URL管理器:對需要爬取的URL和已經爬取過的URL進行管理,可以從URL管理器中取出一個待爬取的URL,傳遞給網頁下載器。

(2)網頁下載器:網頁下載器將URL指定的網頁下載下來,存儲成一個字符串,傳遞給網頁解析器。

(3)網頁解析器:網頁解析器解析傳遞的字符串,解析器不僅可以解析出需要爬取的數據,而且還可以解析出每一個網頁指向其他網頁的URL,這些URL被解析出來會補充進URL管理器

3、數據輸出模塊:存儲爬取的圖片

具體思路就是根據正則表達式,找到url,然后完成下載。

設計環境

 

IDESublime Text3

Python版本:python3.7

 

目標分析

目標:從https://www.shutterstock.com/zh/search/開始,爬取多個類別的前十張圖片

(1)初始URL"https://www.shutterstock.com/zh/search/"

 

(2)詞條頁面URL格式:

https://www.shutterstock.com/zh/search?searchterm=Architecture&image_type=photo

 

(3)找到backgrounds,Architecture,business,kids,food,portrait,flowers,travel等類別標簽名

代碼如下:

 import requests
import re
import urllib.request
import time

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}

url_base = 'https://www.shutterstock.com/zh/search/'
imge_list = []

for i in ['backgrounds','Architecture','business','kids','food','portrait','flowers','travel','skyline']:
    url = url_base+i+'?image_type=photo'

    res = requests.get(url,headers= headers).text
    
    # 為圖片生成縮略圖
    #"thumbnail":"(.*?)",
    cop = re.compile('"thumbnail":"(.*?)",',re.S)
    result = re.findall(cop,res)[:10]
    for each in result:
        filename = each.split('/')[-1]
        #imge_list.append(each) #[90]

        response = urllib.request.urlopen(each)
        img = response.read()
        with open(filename,'wb')as f:
            f.write(img)
        print("已下載:",each)

        time.sleep(5) # 休眠五秒

print("下載結束")

結果:

 

 

遇到的問題


(1)爬取幾張圖片后,沒有產生新的圖片。原因:因為是外國網站,訪問次數過多,會被限制訪問。
解決方法:設置sleep函數,休眠幾秒繼續訪問。


(2)英文頁面不要隨便翻譯,會使源碼標簽顯示錯誤!
解決方法:確認瀏覽器是否自動翻譯過,可以獲取一下他的頁面,然后找想要的標簽,不存在,則有兩種情況,動態或者被翻譯過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM