爬蟲與反爬蟲的較量-圖片反爬
前言
在去年6月吧,剛轉行做爬蟲的時候,經常拿圖片網還有小說網練手,無意中發現一個壁紙網站叫做娟娟壁紙網,有好多高清壁紙(這不是廣告,哈哈)
當時是寫了全站爬取的代碼。以為自己大工告成的時候,結果剛運行,就發現爬出來的圖片不對。
每張圖片都是這樣,我以為遇到了IP限制,於是使用代理,結果仍然是失敗。
難道是請求頭做了限制?好,那我全部帶上。結果依舊失敗。
當時也是忙於找工作,也沒靜下心來仔細想,今天回過頭來繼續盤它。
雖然最後巧妙的用了get請求爬取成功,但是還是沒搞明白原圖反爬的原因。
下面來看一看究竟是怎麽回事。
分析網站
附上鏈接:http://www.jj20.com/bz/zrfg/ssrh/5565.html
圖片url在網站html代碼中,我爬取的也是這張圖片。
復制圖片鏈接到瀏覽器訪問。
正常,瀏覽器能加載,爬蟲為什麽就不能下載。刷新圖片,結果圖片沒了,出現了和爬蟲一樣的結果。
回到網站,刷新,結果,圖片沒了,加載不出來。
假設是緩存導致的,清理一下瀏覽器的cookie和緩存。再次刷新,圖片又出來了。
爬蟲直接請求鏈接會失敗,具體的反爬策略,我們也不清楚。默認為圖片只能在網站上加載,單獨訪問會失敗。
從網站分析圖片,網站裏可能有下載鏈接。
生成壁紙,根據分辨率來的,之前網站爬的應該都是原圖,點進去看一下。
刷新,還是這張圖,可以重復訪問。
http://cj.jj20.com/d/cj0.php?p=/up/allimg/611/031213123016/130312123016-0.jpg&w=1536&h=864
這是一個get請求,提交了三個參數p(圖片鏈接),w(寬),h(高),生成一張1536乘864的圖片。
單張圖片爬取
(寫一個demo,測試了一下)
import requests url = "http://cj.jj20.com/d/cj0.php?p=/up/allimg/611/031213123016/130312123016-0.jpg&w=1536&h=864" res = requests.get(url).content #以二進制字節碼保存 with open(‘1.jpg‘,‘wb‘) as f: f.write(res)
(單張圖片爬取成功)寬和高都是可以自己改的,看自己桌面分辨率自己改。
本文主要介紹爬取思路,全站爬取代碼後續再補充。
對於上面的網站原圖反爬,我至今不是特別明白是什麽原因,希望了解這方面的大牛,可以留言告知,我會盡快回復。
溫馨提示
- 如果您對本文有疑問,請在評論部分留言,我會在最短時間回復。
- 如果本文幫助了您,也請評論關註,作為對我的一份鼓勵。
- 如果您感覺我寫的有問題,也請批評指正,我會盡量修改。
- 本文為原創,轉載請註明出處。
- 本文所有代碼僅供學習參考,在爬取的同時考慮對方的服務器承受能力,適可而止。
爬蟲與反爬蟲的較量-圖片反爬