• 欧美熟妇大胆BBWW
    福建網站建設

    【福州公司網站建設】scrapy網絡爬蟲的破解和反爬蟲的技術

    2018-11-16 08:09


      信息時代下,每天有數以萬計網絡爬蟲 程序在網絡上上自動運行,搜集大量數據。如何有效阻止這些爬蟲是每個網站構建者必須要考慮的事情,而如何以低成本突破網站對爬蟲限制,繼續搜集數據則是每個爬蟲使用者思考的問題,這場在反爬蟲 和爬蟲之間的較量,從未停歇過。福州網站建設結合實際網站來分析反爬蟲的一些常用手段,如 IP 限制、訪問頻率控制等 ;同時基于爬蟲使用者經常使用的開源爬蟲框架 Scrapy,來說明爬蟲使用者又是如何來化解網站限制。
      
      1 Scrapy 框架簡介
    1.1 Scrapy 概述被稱為膠水語言的 Python[5],具有豐富和強大的庫,它的 requests 庫、urllib 庫、scrapy庫和 pyquery 庫等均是爬蟲所用 ,其中 scrapy 庫使用最為廣泛。Scrapy 是 Python 語言開發,為爬取萬維網上網站數據而設計的開源應用型框架,可以應用在數據挖掘以及信息處理等方面。我們借助 Scrapy 可以方便快速按照自己需求,保存網頁關鍵數據為任意數據格式。
      
      1.2 Scrapy 框架詳解
    Scrapy 是由 Scrapy Engine、Spiders、Item Pipeline、調度器、下載器、下載器中間件和Spider 中間件構成[7],具體框架圖如下圖所示,下面對圖中各個組成部分功能分別進行概述:圖 1.1 Scrapy 框架圖(1)Scrapy Engine:負責系統中數據流動,維護框架各個部分正常運作;(2)Spiders:處理下載下來的網頁信息,提取結構化數據,獲取需要額外跟進的 URL;(3)Item Pipeline:處理 Spiders 提取出來的數據;(4)調度器:控制整個 URL 請求順序;(5)下載器:從瀏覽器中下載相應網頁信息;(6)下載器中間件:Scrapy Engine 和下載器之間鉤子,用于修改 Scrapy 請求和響應;(7)Spider 中間件:Scrapy Engine 和 Spiders 之間鉤子,處理 Spider 輸入輸出。
      
      1.3 Scrapy 基本工作原理
    Scrapy 首先從 Spiders 中拿到第一個要請求的 URL,通過調度器調度下載器進行頁面下載,下載下來頁面信息由 Spiders 進行處理。Spiders 從頁面中提取數據信息并交給 ItemPipeline,而提取的 URL 信息則通過 Scrapy Engine 交由調度器處理。Item Pipeline 接收到Spiders 數據,對數據處理,處理之后保存為制定的數據格式。調度器獲取到 URL 之后,重復以上操作,直至調度器里 URL 隊列為空時,結束爬蟲運行[8]。
      
      2 常見反爬蟲方法
    2.1 IP 地址限制爬蟲爬取某個網站數據時,會發生短時間內發出大量訪問請求,而請求 IP 都是同一個的情況。因此,網站會設置訪問闕值,針對超過闕值的異常 IP,網站可以禁止其訪問[9]。但是由于大量用戶公網 IP 相同,這種方法容易造成普通用戶誤傷,所以,一般采取禁止一段時間訪問。
      
      2.2 賬號限制
    目前大部分網站會設置會員限制,部分數據以及操作只能登陸賬號才能有權限訪問,這一做法限制了普通爬蟲隨意訪問。但深層爬蟲[10]可以通過攜帶 cookies 信息,突破網站權限設置,繼續爬取數據。網站可以實時監測賬號訪問頻率,設置訪問頻率限制,當某一賬號訪問超過限制,即可視為異常賬號,禁止其訪問。
      
      2.3 登陸控制網站

    通過瀏覽器請求信息中的 cookies 信息來判斷該請求是否有權限訪問核心數據,一般網站直接輸入用戶的賬號和密碼即可成功登陸并獲取 cookies 信息。這一操作爬蟲可通過分析網頁 Html 源碼,模擬發送請求,就能正常獲取 cookies 信息。于是部分網站設置了驗證碼等驗證方式,只有成功輸入正確驗證碼,才能獲取 cookies 信息。同時,部分網站還會設置 Session 方式進行賬號認證,只有獲取服務器對用戶的唯一標識 ID,才能得到 cookies信息。
      
      2.4 網頁數據異步加載
    早期簡單網頁采取靜態網頁方式,網頁所有內容都包含在 Html 源碼里,爬蟲通過偽造請求,獲取網頁 Html 源碼并分析 Html 源碼,就能提取出自己想要的數據。隨著網頁技術發展,動態網頁逐漸成為主流。動態網頁頁面源碼相對于靜態網頁而言,顯示的內容可以隨著時間、環境或者數據庫操作的結果而發生改變。如果爬蟲只是單純進行分析 Html 源碼,將無法獲取有效數據。
      
      3 基于 Scrapy 的爬蟲方法
    3.1 構建 IP 代理池爬蟲需要短時間內發出大量訪問請求,若爬蟲一直使用同一 IP 地址,就會被網站禁用,為避免這種情況發生,使用 IP 代理[13]是非常有必要。爬蟲 IP 代理有付費和免費兩種,付費IP 質量較高,爬蟲直接請求相關付費接口即可獲取不同 IP;免費 IP 質量較低,容易出現連接失敗的情況。下面,我們以西刺代理網站免費 IP 為例,構建我們自己的 IP 代理池,構建的 IP 代理池架構如下圖所示。
      
      圖 3.1 IP 代理池架構使用詳解:
    (1)分析西刺代理網站頁面源碼,從源碼中找到我們需要提取的 IP 地址數據和端口信息;(2)利用 Scrapy 構建西刺代理網站爬蟲,首先創建 spiders,定義我們要爬取的西刺代理網站地址,通過 spiders 的 css 選擇器,提取出我們需要的數據,實現獲取和提取功能,將數據存入 items 中;(3)對 items 中數據進行驗證處理,實現對提取出來數據進行過濾。導入 requests 模塊,使用爬取出來的 IP 代理去請求百度網址,若返回回來的狀態碼為 200,則證明該 IP 代理有效,將該 IP 地址存入到 mongoDB 數據庫中,反之則丟棄該數據;(4)爬蟲若需要使用 IP 代理池中 IP 數據,只需要修改下載器中間件類中 process_request方法,在該方法中調用 request.meta 設置 IP 代理,IP 代理的具體數據可從 mongoDB 數據庫中查找得到,運行該爬蟲就能實現更換 IP 地址功能。
      
      3.2 構建 cookies 池
    部分網站數據需要登陸獲取權限才能繼續訪問網頁,針對這種情況,爬蟲需要構造并攜帶 cookies 信息。同時網站會對賬號訪問記錄進行統計,超過一定頻率就會被標為異常賬戶,爬蟲重復使用單一的 cookies 信息很容易造成賬號異常而無法使用。解決辦法是構建我們自己的 cookies 池[14],使用爬蟲時,按一定頻率來切換 cookies 信息。需要注意的是,部分網站 cookies 信息具有時效性,需考慮更新問題。下面以伯樂在線為例,進行詳細的說明,構建的 cookies 池架構如下圖所示。
      
      cookies 架構圖使用詳解:(1)需要注冊伯樂在線賬號,將注冊好的賬號密碼存入文檔中;(2)分析伯樂在線登陸頁面源碼,伯樂在線登陸過程較為簡單,直接將賬號密碼用 post 方法請求就可獲取 cookies 信息;(3)基于 Scrapy 框架,構建爬蟲,編寫 spiders 代碼,改寫類中 parse 方法,調用 mongoDB中賬號密碼數據,用 post 請求重復請求登陸頁面,獲取 cookies 信息,將提取出來的 cookies信息存入 mongoDB 中;(4)若要使用 cookies 信息,只需要改寫下載器中間件的代碼,需要注意的是 cookies 時效性,我們要定時更新 mongoDB 中 cookies 信息。
      
      3.3 突破登陸限制
    上面我們分析的伯樂在線登陸過程較簡單,但是部分網站登陸過程遠比這個復雜,例如登陸 github 網頁,需要獲取存儲在 token 字段中的 Session 標識。而知乎的登陸過程則更為復雜,在有 Session 標識同時,還需要正確輸入驗證碼才能登陸成功。下面我們以知乎登陸過程為例,詳細說明爬蟲是如何處理這些登陸問題。
      
      使用詳解:(1)分析知乎登陸頁面源碼,我們可以發現其中有一個 xsrf 值,登陸時需包含該值,登陸時還有驗證碼校驗,必須輸入正確驗證碼才能成功登陸;(2)用 Scrapy 框架編寫爬蟲,在 spiders 文件里的 parse 方法中,提取登陸頁面源碼里的 xsrf值,將該值寫入 post 方法中;(3)對于登陸頁面驗證碼,可以采用人工輸入或者自動識別兩種方法。若采用人工輸入,首先獲取驗證碼圖片,用 PIL 庫中 Image 類的 show 方法,展示圖片,然后手動輸入。若采用自動識別,可接入打碼平臺或者使用機器學習來識別,自動輸入。
      
     ?。?)解決以上兩個問題,爬蟲便可成功登陸,獲取 cookies 信息,進行數據提取。
      
      3.4 selenium
    處理動態網頁隨著前端技術不斷發展,現在部分網站頁面采用動態頁面,需要進行一些頁面操作,動態的加載出數據。我們可以通過分析網頁的 Ajax 請求,用爬蟲直接請求其對應接口獲取數據,但是這種分析較復雜,更簡便的方法是使用 selenium[15]。Selenium 是一個自動化測試工具,主要用來測試 web 應用,能夠在瀏覽器中模擬用戶的操作。下面我們以淘寶為例,詳細說明其使用方法。
      
      使用詳解:(1)分析淘寶主頁面,我們通過在檢索框中輸入檢索詞,點擊確定,就能得到相關商品信息;(2)構建基于 Scrapy 爬蟲,改寫下載器中間件文件,在該文件中導入 selenium 模塊,創建selenium 的 Chrome 對象;(3)修改類中 process_request 方法,添加元素等待語句,一旦頁面元素加載出來,就進行填入檢索詞和點擊按鈕兩個操作;(4)運行以上爬蟲,我們可以看到 Chrome 瀏覽器被自動打開,自動進行填入檢索詞和點擊按鈕兩個操作,頁面數據正常加載出來,爬蟲就可以提取加載出來的數據。
      
      4 結束語
    信息時代下,大數據概念早已深入人心,我們開始越來越關注數據的意義,挖掘數據的價值。爬蟲作為獲取數據重要工具之一,被廣泛使用于各種網站,據統計,網絡上百分之六十流量都是爬蟲產生的。本文僅僅列舉了一些簡單的爬蟲和反爬蟲方法,指出網站為保護數據所采取的措施,而爬蟲又是如何突破重重限制。如今,爬蟲和反爬蟲之間的較量越演越烈,還有更復雜的爬蟲和反爬技術值得我們去探討。

    服務支持

    我們珍惜您每一次在線詢盤,有問必答,用專業的態度,貼心的服務。

    讓您真正感受到我們的與眾不同!

    合作流程

    合作流程

    網站制作流程從提出需求到網站制作報價,再到網頁制作,每一步都是規范和專業的。

    常見問題

    常見問題

    提供什么是網站定制?你們的報價如何?等網站建設常見問題。

    常見問題

    售后保障

    網站制作不難,難的是一如既往的熱情服務及技術支持。我們知道:做網站就是做服務,就是做售后。

    ".$dayBegin.""; //echo $query; $urls=""; $dsql->Execute('arch.id,types.typedir',$query); while($row = $dsql->GetArray('arch.id,types.typedir')) { $urls.="http://www.xuxajurassica.com/".str_replace("{cmspath}","",$row['typedir'])."/".$row[id].".html".","; } $urls=substr($urls,0,-1); $urls = explode(",",$urls); $api = 'http://data.zz.baidu.com/urls?appid=1600599373173546&token=eg19M1t5SyzkDvtJ&type=realtime'; // 前邊的熊掌號ID和密鑰換成自己的 $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n", $urls), CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); echo $result; ?> 在线视频:欧美熟妇大胆BBWW 欧美性VIDEOS高清另类 欧美性XXXX极品高清HD视频在线播放网站,欧美熟妇大胆BBWW在线观看影片,操作界面简单友好,给用户带来愉悦的观映体验! <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>