從零開始寫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框架的數據流動:

先上一張圖:

說了各個模塊的作用,那麼整個項目跑起來的時候,數據到底是怎麼運作的呢?讓我來詳細說明:

  1. Engine從Spider處獲得爬取請求(request)
  2. Engine將爬取請求轉發給Scheduler,調度指揮進行下一步

  3. Engine從Scheduler出獲得下一個要爬取的請求

  4. Engine將爬取請求通過中間件發給Downloader

  5. 爬取網頁後後,downloader返回一個Response給engine

  6. Engine將受到的Response返回給spider處理

  7. Spider處理響應後,產生爬取項和新的請求給engine

  8. Engine將爬取項發送給ITEM PIPELINE(寫出數據)

  9. Engine將會爬取請求再次發給Scheduler進行調度(下一個周期的爬取)

系統化入門?

Scrapy是一個很強大的爬蟲框架,用起來很方便,但是要定製高級的功能就不是那麼簡單的了。我這裡只是簡單的介紹了一下框架的基本原理,但具體如何使用不是一時半會能夠說完的,當然,我會在後面的例子中一一展現這個框架的高級功能。

如果你想要更加系統化的學習理解這個框架:

我推薦官方的文檔:Scrapy 1.3 documentation

英文水平不好同學,我推薦下面兩個文檔:

1 文檔中文翻譯版:Introduction | scrapy 中文手冊

2 scrapy 中文手冊: Scrapy 0.24 文檔 - Scrapy 0.24.6 文檔

這篇文章寫得很「干」,我盡量寫得通俗易懂一點,這個系列專欄一直都是以面向初學者為標準,所以寫得很白,也可能會有些地方出錯,希望各位包涵一下。但是我覺得,一開始不要去接觸那麼多條條框框,大概心裡有個方向就足夠你展開下一步更深的學習了!

每天的學習記錄都會 同步更新到:

微信公眾號: findyourownway

知乎專欄:從零開始寫Python爬蟲 - 知乎專欄

blog : www.ehcoblog.ml

Github: Ehco1996/Python-crawler

推薦閱讀:

BeautifulSoup常見問題歸類
Python用KNN演算法實現驗證碼識別
深入剖析拉勾網,小白也來玩數據(一)
從零開始寫Python爬蟲 --- 爬蟲應用:一號店 商品信息查詢程序
第100篇文章紀念(? ?_?)?

TAG:Python | 爬虫 | scrapy |