從零開始寫Python爬蟲 --- 2.1 Scrapy 爬蟲框架的安裝與基本介紹
這次我們要介紹一個及其強大的爬蟲框架---Scrapy,相比於前面我們寫的bs4爬蟲來說,這次要學習的框架更加的具有規模性,具有良好的並發性能,話不多說,讓我們開始吧。
Srapy框架的安裝:
無論是在windows還是mac下,都可以是用pip工具進行快速安裝:
pip install scrapy
這裡推薦一個非常好用的Python調試shell:ipython
ipython是一種基於Python的交互解釋器,比原生的Python shell提供了更加強大的編輯和交互功能,比如,代碼高亮,自動補全等等。
我們依舊用pip工具進行安裝:pip install ipython
Scrapy框架的基本介紹:
首先,我們得明白一點,Scrapy不是一個功能函數庫,而是一個爬蟲框架,簡單的說,他是一個半成品,可以幫助用戶簡單快速的部署一個專業的網路爬蟲。如果說前面我們寫的定製bs4爬蟲是」手動擋「,那Scrapy就相當於」半自動檔「的車。
Scrapy框架結構:
首先來一張框架整體的圖:
從圖中我們可以清楚的看到,整個框架一共分為五個部分:- SPIDERS
- ITEM PIPELINES
- DOWNLOADER
- SCHEDULER
- ENGIINE
這五個部分互相協作,共同完成了整個爬蟲項目的工作。下面我們來一個一個介紹。
- SPIDERS:
Spiders這個模塊就是整個爬蟲項目中需要我們手動實現的核心部分,就是類似我們之前寫的get_content函數部分,最主要的功能是 解析網頁內容、產生爬取項、產生額外的爬去請求。
ITEM PIPELINES:
這個模塊也是需要我們手動實現的,他的主要功能是將我們爬取篩選完畢的數據寫入文本,資料庫等等。總之就是一個「本地化」的過程。
DOWNLOADER:
這個模塊,是Scrapy幫我們做好的,不需要我們自己編寫,直接拿來用就行,其主要功能就是從網上獲取網頁內容,類似於我們寫的get_html函數,當然,比我們自己寫的這個簡單的函數要強大很多
SCHEDULER:
這個模塊對所有的爬取請求,進行調度管理,同樣也是不需要我們寫的模塊。通過簡單的配置就能達到更加多線程,並發處理等等強大功能。
ENGIINE
這個模塊相當於整個框架的控制中心,他控制著所有模塊的數據流交換,並根據不同的條件出發相對應的事件,同樣,這個模塊也是不需要我們編寫的。
Scrapy框架的數據流動:
先上一張圖:
說了各個模塊的作用,那麼整個項目跑起來的時候,數據到底是怎麼運作的呢?讓我來詳細說明:
- Engine從Spider處獲得爬取請求(request)
- Engine將爬取請求轉發給Scheduler,調度指揮進行下一步
- Engine從Scheduler出獲得下一個要爬取的請求
- Engine將爬取請求通過中間件發給Downloader
- 爬取網頁後後,downloader返回一個Response給engine
- Engine將受到的Response返回給spider處理
- Spider處理響應後,產生爬取項和新的請求給engine
- Engine將爬取項發送給ITEM PIPELINE(寫出數據)
- Engine將會爬取請求再次發給Scheduler進行調度(下一個周期的爬取)
系統化入門?
Scrapy是一個很強大的爬蟲框架,用起來很方便,但是要定製高級的功能就不是那麼簡單的了。我這裡只是簡單的介紹了一下框架的基本原理,但具體如何使用不是一時半會能夠說完的,當然,我會在後面的例子中一一展現這個框架的高級功能。
如果你想要更加系統化的學習理解這個框架:
我推薦官方的文檔:Scrapy 1.3 documentation
英文水平不好同學,我推薦下面兩個文檔:
1 文檔中文翻譯版:Introduction | scrapy 中文手冊2 scrapy 中文手冊: Scrapy 0.24 文檔 - Scrapy 0.24.6 文檔
這篇文章寫得很「干」,我盡量寫得通俗易懂一點,這個系列專欄一直都是以面向初學者為標準,所以寫得很白,也可能會有些地方出錯,希望各位包涵一下。但是我覺得,一開始不要去接觸那麼多條條框框,大概心裡有個方向就足夠你展開下一步更深的學習了!
每天的學習記錄都會 同步更新到:
微信公眾號: findyourownway知乎專欄:從零開始寫Python爬蟲 - 知乎專欄blog : www.ehcoblog.mlGithub: Ehco1996/Python-crawler
推薦閱讀:
※BeautifulSoup常見問題歸類
※Python用KNN演算法實現驗證碼識別
※深入剖析拉勾網,小白也來玩數據(一)
※從零開始寫Python爬蟲 --- 爬蟲應用:一號店 商品信息查詢程序
※第100篇文章紀念(? ?_?)?