Pexels
https://www.pexels.com/zh-cn/search/%E6%97%A5%E8%90%BD/
1、window11
2、python3.7
3、PyCharm Community Edition 2021.2.1
4、雙核浏覽器
5、浏覽器自帶開發者工具
在下拉網頁的過程中發現,會不斷加載出新的圖片,說明該網頁為動態網頁,那我們可以初步猜想圖片的鏈接存放在通過Ajax請求的網絡數據包中,抓包過程如圖:
1、https://www.pexels.com/zh-cn/api/v3/search/photos?page=10&per_page=24&query=%E6%97%A5%E8%90%BD&orientation=all&size=all&color=all
2、https://www.pexels.com/zh-cn/api/v3/search/photos?page=11&per_page=24&query=%E6%97%A5%E8%90%BD&orientation=all&size=all&color=all
3、https://www.pexels.com/zh-cn/api/v3/search/photos?page=12&per_page=24&query=%E6%97%A5%E8%90%BD&orientation=all&size=all&color=all
4、https://www.pexels.com/zh-cn/api/v3/search/photos?page=13&per_page=24&query=%E6%97%A5%E8%90%BD&orientation=all&size=all&color=all
5、https://www.pexels.com/zh-cn/api/v3/search/photos?page=14&per_page=24&query=%E6%97%A5%E8%90%BD&orientation=all&size=all&color=all
經過對比發現,只有參數page在變化,且從1開始隔間為1開始遞增,可以刪除的參數color、size、orientation
先將請求頭內容照如圖所寫,發現返回報錯:{‘error_messages’: [‘Bad API credentials.’]}
原因是因為網站服務器對gei請求的參數進行了校驗,但是請求頭中沒有找到密鑰,於是修改請求頭如下圖:
如上圖一眼可以看出,響應數據格式為json數據格式,可以使用jsonpath對json數據進行解析,方便簡單且快速
1、requests模塊的get方法就是模擬浏覽器發起get網絡請求,得到服務器返回響應數據,headers中添加了user-agent用來將程序偽裝成浏覽器,user-agent是浏覽器標識,一般服務器都會檢查請求頭中的user-agent字段的內容;
2、響應數據是字符串格式,但是看起來和json數據一樣,使用json.loads()將str格式數據轉換為json格式數據;
3、使用jsonpath.jsonpath()方法來對json格式數據進行解析提取出圖片名稱和圖片鏈接;
4、為了降低爬蟲程序對目標服務器造成的壓力,要在程序中設置強制隨機休眠time.sleep(random.randint(3, 5));