• <th id="bb20k"></th>
    1. <th id="bb20k"></th>
      1. <th id="bb20k"></th>
        <progress id="bb20k"></progress>

        您的位置:新聞資訊 >文章內容
        爬蟲怎么突破反爬蟲機制?常見六種破解方法
        來源:zgjx 作者:admin 時間:2018-11-26 14:13:17

        對于反爬機制,大家最有體會的就是12306的驗證碼了,但即使如此,被限制住的大部分都是真實用戶,爬蟲卻利用各種方法成功突破了限制。這爬蟲怎么突破反爬蟲機制的呢?一起跟精靈代理去了解一些常見的網絡爬蟲突破限制的方法。

        1.構造合理的 HTTP 請求頭

        HTTP 的請求頭是在你每次向網絡服務器發送請求時,傳遞的一組屬性和配置信息。HTTP 定義了十幾種古怪的請求頭類型,不過大多數都不常用。只有下面的七個字段被大多數瀏覽器用來初始化所有網絡請求。

        爬蟲怎么突破反爬蟲機制

        雖然網站可能會對HTTP請求頭的每個屬性都進行檢查,但是通常真正重要的參數就是User-Agent。無論是什么樣的爬蟲,一定要記得把User-Agent屬性設置成不容易引起懷疑的內容,比如如果你用python的urllib標準庫時,它的User-Agent可能就會是Python-urllib/3.4,這樣就很容易被禁。另外,如果你正在處理一個警覺性非常高的網站,就要注意那些經常用卻很少檢查的請求頭,比如 Accept-Language屬性,也許它正是那個網站判斷你是否是人類訪問者的關鍵。

        2.設置cookie

        cookie其實是儲存在用戶終端的一些被加密的數據,有些網站通過cookies來識別用戶身份,如果某個訪問總是高頻率地發請求,很可能會被網站注意到,被懷疑為爬蟲,這時網站就可以通過cookie找到這個訪問的用戶而拒絕其訪問。對于這種情況可以通過禁用cookie,主動阻止服務器寫入。禁用cookie可以防止使用cookies識別爬蟲的網站來禁掉我們。
        但是采集某些網站時cookie是不可或缺的。要在一個網站上持續保持登錄狀態,需要在多個頁面中保存一個cookie。有些網站不要求在每次登錄時都獲得一個新cookie,只要保存一個舊的已登錄的 cookie 就可以訪問。

        3.降低訪問頻率

        為了提高爬蟲的效率,很多人在爬蟲中使用多線程、異步等手段,使得爬蟲在一個小時內甚至可以訪問數十萬次頁面,給服務器帶來了不小的壓力,因此有一些防護措施較完備的網站就可能會阻止你快速地提交表單,或者快速地與網站進行交互。即使沒有這些安全措施,用一個比普通人快很多的速度從一個網站下載大量信息也可能讓自己被網站封殺。
        遇到這種網站,如果你對爬蟲效率要求不高,可以嘗試降低爬蟲訪問速度,比如不再使用多線程技術,每次訪問后設置等待時間,限制每小時訪問量等。比如在python中:

        import time,random#導入包time.sleep(random.randint(1,9))#設置時間間隔為隨機幾秒鐘

        但如果你對爬蟲效率要求比較高,每次訪問都等待無法滿足要求,那么首先需要確定網站是根據什么條件進行限制的,再想辦法去突破限制。比如很多網站都是通過IP來限制訪問量的,那么就可以使用代理IP,每請求幾次就換一個IP,這樣就可以避免被禁了。

        4.動態頁面的反爬蟲

        上述的幾種情況大多都是出現在靜態頁面,還有一部分網站,我們需要爬取的數據是通過ajax請求得到,或者通過JavaScript生成的。對于這種情況,我們首先需要對網絡請求進行分析,如果能夠找到ajax請求,也能分析出具體的參數和響應的具體含義,我們就能采用上面的方法,直接模擬ajax請求,對響應的json進行分析得到需要的數據。
        如果這種方法不行,或者需要處理JS,那么則可以采用selenium+phantomJS。PhantomJS是一個無界面的WebKit瀏覽器,除了沒有界面,基本和一般的瀏覽器一樣。Selenium是一個自動化測試工具,它可以驅動瀏覽器,兩者結合,雙劍合璧,從填寫表單到點擊按鈕再到滾動頁面,全部都可以模擬,不考慮具體的請求和響應過程,只是完完整整的把人瀏覽頁面獲取數據的過程模擬一遍。 用這套框架幾乎能繞過大多數的反爬蟲,因為它不是在偽裝成瀏覽器來獲取數據(上述的通過添加Headers一定程度上就是為了偽裝成瀏覽器),phantomJS本身就是一個沒有界面的瀏覽器,只是操控這個瀏覽器的不是人而是程序。利用selenium+phantomJS能干很多事情,cookie、JavaScript、header都能自動處理,比如現在比較流行的滑動式驗證碼,就可以使用它們解決。

        5.注意隱含輸入字段值

        為了反爬蟲,一些網站會在html表單中故意添加隱藏元素,這些隱含字段可以讓字段的值對瀏覽器可見,但是對用戶不可見,除非看網頁源代碼。如果你爬著爬著就把隱藏元素都爬出來了,那么就很容易被網站識別出來,只要被網站發現,就有可能立馬被封賬號或者IP,所以在提交表單前一定要先看一下元素再進行爬取。
        比如下面這段html代碼:

            A bot-proof form            A bot-proof form    Go here!    Click me!

        這段代碼包含了兩個鏈接,但是其中一個通過css隱藏了,一旦你訪問了這個鏈接,可能就會中招。而在表單中,電話號碼字段name="phone"是一個隱含的輸入字段,郵箱地址字段name="email"是將元素向右移動50000像素并隱藏滾動條,這兩個對用戶而言都是不可見的。
        處理這種頁面可以在訪問前先進行分析,也可以使用Selenium,通過is_displayed來判斷元素在頁面上是否可見,從而避免被封禁。

        6.使用代理

        網絡爬蟲幾乎所有的數據都是偽造的,但是有一項卻是不能作假的,那就是IP地址。因此很多網站為了防爬蟲,制定了一系列規則去封殺IP,簡單粗暴又十分有效。如果你的IP地址被封,那么這時就該代理上場了。所謂代理就是介于用戶與網站之間的第三者:用戶先將請求發到代理,然后代理再發到服務器,這樣看起來就像是代理在訪問那個網站了。這時,服務器會將這次訪問算到代理頭上。同時用多個代理的話,單個IP的訪問量就降下去了,于是就有可能逃過一劫。

        上文介紹了“爬蟲怎么突破反爬蟲機制”問題的幾種突破方法,合理的使用,能夠起預防作用,也能降低為封殺的幾率,爬蟲防止被封禁的核心思想就是盡量偽裝成正常的用戶。


        相關文章內容簡介
        在線咨詢
        微信公眾號

        微信公眾號

        回到頂部
        国产欧美 一区,国产一本大道香蕉AV,国产亚洲卡通另类图片,国产高清AV在线