在本爬蟲程序中共有三個模塊:
1、爬蟲調度端:啟動爬蟲,停止爬蟲,監視爬蟲的運行情況
2、爬蟲模塊:包含三個小模塊,URL管理器、網頁下載器、網頁解析器。
(1)URL管理器:對需要爬取的URL和已經爬取過的URL進行管理,可以從URL管理器中取出一個待爬取的URL,傳遞給網頁下載器。
(2)網頁下載器:網頁下載器將URL指定的網頁下載下來,存儲成一個字符串,傳遞給網頁解析器。
(3)網頁解析器:網頁解析器解析傳遞的字符串,解析器不僅可以解析出需要爬取的數據,而且還可以解析出每一個網頁指向其他網頁的URL,這些URL被解析出來會補充進URL管理器
3、數據輸出模塊:存儲爬取的圖片
具體思路就是根據正則表達式,找到url,然后完成下載。
設計環境
IDE:Sublime 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)英文頁面不要隨便翻譯,會使源碼標簽顯示錯誤!
解決方法:確認瀏覽器是否自動翻譯過,可以獲取一下他的頁面,然后找想要的標簽,不存在,則有兩種情況,動態或者被翻譯過。