Python 從零開始爬蟲(一)——爬蟲假裝&反「反爬」

  以前提到過,有些網站是防爬蟲的。其實事實是,凡有必定規模的網站,大公司的網站,或是盈利性質比較強的網站,都是有高級的防爬措施的。總的來講有兩種反爬策略,要麼驗證身份,把蟲子踩死在門口;要麼在網站植入各類反爬機制,讓爬蟲知難而退。
  本節內容就着這兩種反爬策略提出一些對策。html

身份假裝

  就算是一些不知名的小網站,多多少少還會檢查一下headers驗證一下訪者的身份,大網站就更不用說了(我一次爬網易雲的時候,忘記加headers,直接被紅掉)
  因此,爲了讓蟲寶們帶着信息凱旋歸來,咱們要教會爬蟲們如何假裝;有時光假裝也不行,咱們還要教爬蟲具體"如何作人",讓本身的舉止更像普通人而不是比單身漢手速還快的未知生物。python

自定製 Requests Headers

  • 「吾是人!」——修改user-agent:裏面儲存的是系統和瀏覽器的型號版本,經過修改它來僞裝本身是人。
  • 「我從河北省來」——修改referer:告訴服務器你是經過哪一個網址點進來的而不是憑空出現的,有些網站會檢查。
  • 「餅乾!」:——帶上cookie,有時帶不帶餅乾獲得的結果是不一樣的,試着帶餅乾去「賄賂」服務器讓她給你完整的信息。
  • 詳細數據能夠F12捉個包來查看其Requests Headers

圖片描述

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

下降主IP訪問頻率

注意:這是針對長期的,大範圍的爬蟲的segmentfault

有些網站會監視某個ip的訪問頻率和次數,一但超過某個閾值,就把你看成爬蟲嫌犯趕出去了,這時就要想辦法下降本身的存在感了。瀏覽器

  • Zzzzz——休眠:爬一段時間後休息一會,不只是爲了本身的成功,也是爲服務器着想。
  • 我不去,我派別人去——ip代理:經過proxies參數來使用,前提是你要有ip,好的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
  • 加密/雜亂的源碼:你知道你要的東西就在那裏,可是不知道怎樣提取出來。——推理解謎,看腦子好很差使了。
  • 動態加載:須要和頁面交互才能獲取更多信息,可是爬蟲無法和它交互啊。——直接上selenium/手動捉包分析出目標連接
  • ajax技術:異步加載,網頁內容分次加載,用爬蟲只能獲得第一次發出的html,致使信息不全。——上selenium/手動捉包分析出目標鏈接

補充:
selenium模塊,模擬瀏覽器,強是強可是缺點是慢。
其實動態加載是爲了方便用戶點哪看哪的,但這也加大了爬蟲的難度,由於不少信息所以被隱藏了起來。異步

最後

假裝有套路,代碼直接套,多加headers總沒錯。網站

內嵌反爬很靈活,沒有什麼固定的代碼格式,要花時間去分析出來。加密

本文新出現的方法/模塊,後面會有實例,不要方。

下一篇正式進入網頁解析主題,以後就能夠開始寫小爬蟲了♪(^∀^●)ノ。

相關文章
相關標籤/搜索