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

        您的位置:新聞資訊 >文章內容
        怎么應對反爬蟲機制?常見的一些限制以及突破限制方法
        來源:互聯網 作者:admin 時間:2018-12-06 16:51:24

        對于一些人來說,寫爬蟲簡單,照著框架寫,或者照搬別人寫的爬蟲,但是因為大家采集的網站不一樣,面對的反爬蟲機制也不一樣,如此一來,是否能突破限制,采集到數據也是一個未知數的,今天精靈代理帶大家一起去看看常見的一些限制以及突破限制方法,看看別人是怎么應對反爬蟲機制的。


        采集不到數據常見原因:


        也許是向服務器提交自認為已經處理得很好的表單卻被拒絕。


        也許是自己的IP地址不知道什么原因直接被網站封殺,無法繼續訪問。


        原因可能是一些最復雜的bug,也可能是這些bug讓人意想不到(程序在一個網站上可以正常使用,但在另一個看起來完全一樣的網站上卻用不了)。


        最有可能出現的情況是:對方有意不讓爬蟲抓取信息。網站已經把你定性為一個網絡機器人直接拒絕了,你無法找出原因。


        也許還不止上面的原因,應對的方法就是讓爬蟲采集數據時看起來像人類用戶。


        怎么應對反爬蟲機制?常見的一些限制以及突破限制方法


        網站防采集的前提就是要正確地區分人類訪問用戶和網絡機器人。雖然網站可以使用很多識別技術(比如驗證碼)來防止爬蟲,但還是有一些十分簡單的方法,可以讓你的網絡機器人看起來更像人類訪問用戶。


        1.注意隱含輸入字段值


        在HTML表單中,“隱含”字段可以讓字段的值對瀏覽器可見,但是對用戶不可見(除非看網頁源代碼)。隨著越來越多的網站開始用cookie存儲狀態變量來管理用戶狀態,在找到另一個最佳用途之前,隱含字段主要用于阻止爬蟲自動提交表單。


        用隱含字段阻止網絡數據采集的方式主要有兩種。第一種是表單頁面上的一個字段可以用服務器生成的隨機變量表示。如果提交時這個值不在表單處理頁面上,服務器就有理由認為這個提交不是從原始表單頁面上提交的,而是由一個網絡機器人直接提交到表單處理頁面的。繞開這個問題的最佳方法就是,首先采集表單所在頁面上生成的隨機變量,然后再提交到表單處理頁面。


        第二種方式是“蜜罐”(honeypot)。如果表單里包含一個具有普通名稱的隱含字段(設置蜜罐圈套),比如“用戶名”(username)或“郵箱地址”(emailaddress),設計不太好的網絡機器人往往不管這個字段是不是對用戶可見,直接填寫這個字段并向服務器提交,這樣就會中服務器的蜜罐圈套。服務器會把所有隱含字段的真實值(或者與表單提交頁面的默認值不同的值)都忽略,而且填寫隱含字段的訪問用戶也可能被網站封殺。


        總之,有時檢查表單所在的頁面十分必要,看看有沒有遺漏或弄錯一些服務器預先設定好的隱含字段(蜜罐圈套)。如果你看到一些隱含字段,通常帶有較大的隨機字符串變量,那么很可能網絡服務器會在表單提交的時候檢查它們。另外,還有其他一些檢查,用來保證這些當前生成的表單變量只被使用一次或是最近生成的(這樣可以避免變量被簡單地存儲到一個程序中反復使用)。


        2.提交合理的請求頭


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


        3.使用可變的遠程IP地址


        建立網絡爬蟲的第一原則是:所有信息都可以偽造。你可以用非本人的郵箱發送郵件,通過命令行自動化鼠標的行為,或者通過IE5.0瀏覽器耗費網站流量來嚇唬網管。


        但是有一件事情是不能作假的,那就是你的IP地址。任何人都可以用這個地址給你寫信:“美國華盛頓特區賓夕法尼亞大道西北1600號,總統,郵編20500?!钡?,如果這封信是從新墨西哥州的阿爾伯克基市發來的,那么你肯定可以確信給你寫信的不是美國總統。


        從技術上說,IP地址是可以通過發送數據包進行偽裝的,就是分布式拒絕服務攻擊技術(DistributedDenialofService,DDoS),攻擊者不需要關心接收的數據包(這樣發送請求的時候就可以使用假IP地址)。但是網絡數據采集是一種需要關心服務器響應的行為,所以我們認為IP地址是不能造假的。


        阻止網站被采集的注意力主要集中在識別人類與機器人的行為差異上面。封殺IP地址這種矯枉過正的行為,就好像是農民不靠噴農藥給莊稼殺蟲,而是直接用火燒徹底解決問題。它是最后一步棋,不過是一種非常有效的方法,只要忽略危險IP地址發來的數據包就可以了。


        4.設置cookie的學問


        雖然cookie是一把雙刃劍,但正確地處理cookie可以避免許多采集問題。網站會用cookie跟蹤你的訪問過程,如果發現了爬蟲異常行為就會中斷你的訪問,比如特別快速地填寫表單,或者瀏覽大量頁面。雖然這些行為可以通過關閉并重新連接或者改變IP地址來偽裝,但是如果cookie暴露了你的身份,再多努力也是白費。


        如果你在采集一個或者幾個目標網站,建議你檢查這些網站生成的cookie,然后想想哪一個cookie是爬蟲需要處理的。


        5.爬蟲通常如何避開蜜罐


        雖然在進行網絡數據采集時用CSS屬性區分有用信息和無用信息會很容易(比如,通過讀取id和class標簽獲取信息),但這么做有時也會出問題。如果網絡表單的一個字段通過CSS設置成對用戶不可見,那么可以認為普通用戶訪問網站的時候不能填寫這個字段,因為它沒有顯示在瀏覽器上。如果這個字段被填寫了,就可能是機器人干的,因此這個提交會失效。


        這種手段不僅可以應用在網站的表單上,還可以應用在鏈接、圖片、文件,以及一些可以被機器人讀取,但普通用戶在瀏覽器上卻看不到的任何內容上面。訪問者如果訪問了網站上的一個“隱含”內容,就會觸發服務器腳本封殺這個用戶的IP地址,把這個用戶踢出網站,或者采取其他措施禁止這個用戶接入網站。實際上,許多商業模式就是在干這些事情。


        雖然你不太可能會去訪問你找到的那些隱含鏈接,但是在提交前,記得確認一下那些已經在表單中、準備提交的隱含字段的值(或者讓Selenium為你自動提交)。


        6.正常的時間訪問路徑


        有一些防護措施完備的網站可能會阻止你快速地提交表單,或者快速地與網站進行交互。即使沒有這些安全措施,用一個比普通人快很多的速度從一個網站下載大量信息也可能讓自己被網站封殺。


        因此,雖然多線程程序可能是一個快速加載頁面的好辦法--在一個線程中處理數據,另一個線程中加載頁面--但是這對編寫好的爬蟲來說是恐怖的策略。還是應該盡量保證一次加載頁面加載且數據請求最小化。


        合理控制速度是你不應該破壞的規則。過度消耗別人的服務器資源會讓你置身于非法境地,更嚴重的是這么做可能會把一個小型網站拖垮甚至下線。拖垮網站是不道德的,是徹頭徹尾的錯誤。所以請控制采集速度!


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

        微信公眾號

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