1. 程式人生 > >爬蟲小技巧

爬蟲小技巧

反爬蟲 很多 一個 簡單的 站點 它的 能力 -c 自動

1、何為爬蟲

  • 爬蟲的概念就是能按照給定的目標及規則實現自動化采集網絡數據的程序或腳本。通俗的來說,就是通過程序來模擬人登陸網站去獲取想要數據,就是這麽簡單。
  • 爬蟲的本質是直接用程序腳本去實現http請求,訪問目標網站或數據接口,然後對獲得的數據去進行解析,從而得到你想要的數據。
  • 本人認為爬蟲的最高境界是完完全全模擬出人的操作,讓網站監控那一方無法區分出是爬蟲還是人。當然這是非常難的,現在幾乎不可能,但技術在進步嘛。

2、反爬蟲偵測機制(可能不全,供學習交流)

本騷年預言,在未來最貴的東西將是數據,沒錯,就是數據,所以,從各種數據源如何去成功獲取數據將會變得越來越困難,但是新的爬蟲技術也會層出不窮,不要慌,不扯了直接入正題。以下我會給出我所實踐出的爬蟲技巧:

1. User-Agent機制

  • 通過遊覽器的開發者工具中看到,每次進行http訪問時,它的請求頭裏都有User-Agent這個參數,列如:
    技術分享
  • user-agent指的是訪問網站時的用戶代理,簡單的說,它指的是你的訪問終端,即遊覽器、硬件平臺、系統軟件的相關信息。

  • 現在很多網站為了防爬蟲,都會對user-agent這個參數進行檢測,我們在爬數據時盡量把這個參數帶上。

  • 在爬取數據時也可以合理地切換不同的user-agent來營造新的客戶機環境,降低被偵測的幾率,提升其並發抓取數據的能力。特別是對應單點式登錄時,使你在同臺服務器上提升數據並發爬取的能力(即模擬多個用戶登錄)。(屬個人意見,請大家指教)

2.Referer機制

  • 每次進行http訪問時,它的請求頭裏經常會包含referer這個參數,列如:技術分享
  • referer翻譯成中文是“引用”的意思,在http頭裏指代的是引用站點,即訪問該鏈接的前一個訪問的鏈接,告訴該鏈接他是從哪裏跳轉過來的。
  • 為了反爬蟲,部分網站或接口都對referer做了監控,如淘寶等網站。無referer或假referer都被認定為非法訪問。這時候就需要我們用遊覽器開發者工具去跟蹤一下該鏈接訪問流程,從而提取出對應的referer加到請求頭中,來實現數據爬取。

3.Cookies機制

  • 這可是重點啊,cookie在我們的web應用中,常常用來辨別用戶身份、進行session跟蹤等功能,也起到了反爬蟲作用。以下我會簡述我在實踐中所遇到的cookie反爬蟲機制和一些對策。(如有問題請及時提出,謝謝)
    1. 身份驗證
      很多網站的數據都是需要你登錄後才能進行數據爬取,而用戶的登錄狀態則是記錄在cookie
      中,大部分的網站都是把sessionId作為key放在cookie中,來跟蹤用戶。這個時候我們就需要去模擬用戶的登錄來獲取對應的cookie。
      模擬登陸是關鍵點也是個大難點,只要你成功實現模擬登陸,後面的數據爬取都將不是問題。這裏我就拿比較普通的網站來舉例子:
      • 首先是打開遊覽器開發者工具,先人工嘗試一遍登錄,細細觀察整個流程確定需要哪些參數,需要註意cookie的變化。
      • 然後正式開始,先解析登陸頁面獲取待提交的表單以及response頭set-cookie中的參數(之前講的referer和user-agent也別忘了),根據表單放入對應的參數(如賬戶、密碼等),同時在http頭中放入對應的cookie及相關參數。需註意,在整個登錄過程中可能會遇到動態驗證碼的問題,這個時候你可以去搞個驗證碼解析平臺(如優優,雲速等)或者你把你的爬蟲程序做成半手動的,直接獲取驗證碼圖片流並存到本地,通過人工輸入驗證碼。
      • 然後提交登錄表單即可,登錄成功後,攜帶對應的cookie來進行數據爬取。
    2. 訪問流程驗證
      啥是訪問流程驗證?莫慌,我來解答。現在很多網站在加載數據時都會通過ajax的異步方式來獲取數據以提高網站性能,有次我在爬取某個網站的ajax接口的數據時,發現得不到數據,後來就去研究其中的cookie值的變化,發現訪問需要某個特定的cookie值,這個特定的cookie值是哪裏來的啊?本人就去查訪問該接口前的所有的ajax接口,終於發現了這個cookie值。
      事實證明,按正常的人為訪問流程,獲取數據會先訪問這些通行證接口(本人瞎起的名字,莫噴)來獲取訪問數據的權限特定的cookie值,最後才能得到數據。歸更到底,爬蟲的目標就是要完全模擬人為正常操作。

4.峰值規避機制

  • 有部分網站會對每個IP進行流量監控,當某個IP在單位時間內的訪問次數超過設定的峰值時,就會對該IP的訪問進行限制(如彈出驗證碼頁面,彈出登錄頁面、直接禁止訪問等手段),這個時候就需要我們對該接口進行峰值測試,找出這個單位峰值(這個過程可能會很煩,堅持少年)。之後,把爬蟲程序單位時間內的訪問次數降到峰值以下就OK了。

5.代理IP機制

  • 有些網站會對每個IP進行非常嚴格的流量監控,除了上面說的峰值規避機制,還可以通過代理IP的方式來解決對我們爬蟲程序的限制,當我們發現我們的IP被封時,可以通過切換IP的形式(即代理IP)來繼續爬取數據。常見的IP代理商有VPN等。

6.客戶端爬取機制

  • 如何實現數據的精確爬取?如何規避種種反爬蟲機制?如何更真實地模擬人為操作?那就把你的爬蟲程序放到離數據源最近的地方,就是在客戶端實現數據爬取,如何實現呢?就是通過遊覽器插件來完成,我們程序員大多用的是chrome遊覽器,所以我就寫了個chrome遊覽器插件來爬取數據。
  • 我的設計是通過chrome插件去定時向服務端領取爬蟲任務。領取任務後,通過插件去自主打開目標網頁,頁面加載完全後向頁面註入js代碼,來爬取數據,並臨時存儲在chrome遊覽器的內置數據庫中,等整個流程走完後,從chrome數據庫中拿出所有抓取到的數據,再自主訪問服務端接口來提交這些數據。

3、爬蟲技術小結

    • 同誌們,我說的這些技巧都很實用,但是也請大家永遠都不要小看反爬蟲機制,他們有時候會讓你們感到頭疼萬分,比如生物探測算法、各種奇葩的驗證碼圖片等等。
    • 爬蟲程序和防爬蟲機制始終都在進行著一場無休止的博弈,新的爬蟲技術不斷問世,同樣,防爬蟲機制也在不斷完善,同誌們不要放棄,不要被困難打倒,始終堅信一點:“世上沒有爬取不到的數據!!!”。
    • 本人接觸爬蟲也就幾個月,所以上述內容可能存在錯誤可能不全,大家不要介意,希望大家多多提出建議,一起交流學習。

爬蟲小技巧