為什么要用爬蟲框架?
如果你對爬蟲的基礎知識有了一定了解的話,那么是時候該了解一下爬蟲框架了,那么為什么要使用爬蟲框架?
- 學習框架的根本是學習一種編程思想,而不應該僅僅局限于是如何使用它,從了解到掌握一種框架,其實是對一種思想理解的程序,
- 框架也給我們的開發帶來了極大的方便,許多條條框框都已經是寫好了的,并不需要我們重復造輪子,我們只需要根據自己的需求定制自己要實作的功能就好了,大大減少了作業量,
- 參考并學習優秀的框架代碼,提升編程代碼能力
scrapy框架的介紹
比較流行的爬蟲的框架有scrapy和pyspider,但是被大家所鐘愛的我想非scrapy莫屬了,scrapy是一個開源的高級爬蟲框架,我們可以稱它為"scrapy語言",它使用python撰寫,用于爬取網頁,提取結構性資料,并可將抓取得結構性資料較好的應用于資料分析和資料挖掘,scrapy有以下的一些特點:
scrapy基于事件的機制,利用twisted的設計實作了非阻塞的異步操作,這相比于傳統的阻塞式請求,極大的提高了CPU的使用率,以及爬取效率,- 配置簡單,可以簡單地通過設定一行代碼實作復雜功能,
- 可拓展,插件豐富,比如分布式scrapy + redis、爬蟲可視化等插件,
- 決議方便易于使用,scrapy封裝了xpath等決議器,提供了更方便,更高級的selector構造器,可以有效的處理破損的HTML代碼和編碼,
scrapy的架構

Scrapy官方檔案圖片
組件
引擎(Engine)
引擎負責控制資料流在系統中所有組件中流動,并在相應動作發生時觸發事件, 詳細內容查看下面的資料流(Data Flow)部分,
調度器(Scheduler)
調度器從引擎接受request并將他們入隊,以便之后引擎請求他們時提供給引擎,
下載器(Downloader)
下載器負責獲取頁面資料并提供給引擎,而后提供給spider,
爬蟲(Spiders)Spider是Scrapy用戶撰寫用于分析response并提取item(即獲取到的item)或額外跟進的URL的類, 每個spider負責處理一個特定(或一些)網站,
專案管道(Item Pipeline)Item Pipeline負責處理被spider提取出來的item,典型的處理有清理、 驗證及持久化(例如存取到資料庫中),
下載器中間件(Downloader middlewares)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response, 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能,
爬蟲中間件(Spider middlewares)Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests), 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能,
資料流程序
- 引擎打開一個網站
(open a domain),找到處理該網站的Spider并向該spider請求第一個要爬取的URL(s), - 引擎從
Spider中獲取到第一個要爬取的URL并在調度器(Scheduler)以Request調度, - 引擎向調度器請求下一個要爬取的URL,
- 調度器回傳下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求
(request)方向)轉發給下載器(Downloader), - 一旦頁面下載完畢,下載器生成一個該頁面的
Response,并將其通過下載中間件(回傳(response)方向)發送給引擎, - 引擎從下載器中接收到
Response并通過Spider中間件(輸入方向)發送給Spider處理, Spider處理Response并回傳爬取到的Item及(跟進的)新的Request給引擎,- 引擎將(Spider回傳的)爬取到的Item給
Item Pipeline,將(Spider回傳的)Request給調度器, - (從第二步)重復直到調度器中沒有更多地
request,引擎關閉該網站,
scrapy和requests+bs用哪個好?
這個根據自己方便來,requests + beautifulsoup當然可以了,requests + 任何解器式都行,都是非常好的合作,這樣用的有點是我們可以靈活地寫我們自己的代碼,不必拘泥于固定模式,對于使用固定的框架有時候不一定用起來方便,比如scrapy對于反反爬處理并沒有很完善,好多時候也要自己來解決,
但是對于一些中小型的爬蟲任務來講,scrapy確實是非常好的選擇,它避免了我們來寫一些重復的代碼,并且有著出色的性能,我們自己寫代碼的時候,比如為了提高爬取效率,每次都自己碼多執行緒或異步等代碼,大大浪費了開發時間,這時候使用已經寫好的框架是再好不過的選擇了,我們只要簡單的寫寫決議規則和pipeline就好了,那么具體哪些是需要我們做的呢?看看下面這個圖就明白了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/198236.html
標籤:Python
