以前提到過,有些網站是防爬蟲的。其實事實是,凡有必定規模的網站,大公司的網站,或是盈利性質比較強的網站,都是有高級的防爬措施的。總的來講有兩種反爬策略,要麼驗證身份,把蟲子踩死在門口;要麼在網站植入各類反爬機制,讓爬蟲知難而退。
本節內容就着這兩種反爬策略提出一些對策。html
就算是一些不知名的小網站,多多少少還會檢查一下headers驗證一下訪者的身份,大網站就更不用說了(我一次爬網易雲的時候,忘記加headers,直接被紅掉)
因此,爲了讓蟲寶們帶着信息凱旋歸來,咱們要教會爬蟲們如何假裝;有時光假裝也不行,咱們還要教爬蟲具體"如何作人",讓本身的舉止更像普通人而不是比單身漢手速還快的未知生物。python
headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',#如某些網站(如p站)要檢查referer,就給他加上 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'#每一個爬蟲必備的假裝 } r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)
headers數據一般用這兩個便可,並且筆者強烈推薦在爬蟲中爲每一個request都配個user-agent,總比什麼都沒有好,加了也不會報錯。ajax
注意:這是針對長期的,大範圍的爬蟲的segmentfault
有些網站會監視某個ip的訪問頻率和次數,一但超過某個閾值,就把你看成爬蟲嫌犯趕出去了,這時就要想辦法下降本身的存在感了。瀏覽器
time.sleep(60)#用python自帶time模塊的休眠功能 proxies = {'http': 'http://10.10.1.10:3128',#「協議類型:完整ip地址+端號」 'https': 'http://10.10.1.10:1080'}#代理ip字典,隨機調用 r = requests.get(url,headers=headers,proxies=proxies)
在系列第零篇中我提到獲取網頁源碼是有坑的,沒錯,有些時候headers假裝什麼的都作足了,可你仍是不能如願以償的得到正確的網頁源碼,要麼缺,要麼給你一堆絕不相關的東西,要麼乾脆讓你紅掉。
這說明要點不是僞不假裝的問題了,而是如何去解讀網頁的防爬機制從而推出解決方法,這就要求比較高的觀察和分析能力了。服務器
就我目前遇到的主要有:cookie
補充:
selenium模塊,模擬瀏覽器,強是強可是缺點是慢。
其實動態加載是爲了方便用戶點哪看哪的,但這也加大了爬蟲的難度,由於不少信息所以被隱藏了起來。異步
假裝有套路,代碼直接套,多加headers總沒錯。網站
內嵌反爬很靈活,沒有什麼固定的代碼格式,要花時間去分析出來。加密
本文新出現的方法/模塊,後面會有實例,不要方。
下一篇正式進入網頁解析主題,以後就能夠開始寫小爬蟲了♪(^∀^●)ノ。