1. 程式人生 > >scrapy框架 - 基礎概念和流程

scrapy框架 - 基礎概念和流程

目標

  1. 瞭解學習scrapy的目的
  2. 能夠說出非同步和非阻塞的區別
  3. 掌握scrapy的流程

1 為什麼要學習scrapy

通過前面的學習,我們已經能夠解決90%的爬蟲問題了,那麼scrapy是為了解決剩下的10%的問題麼,不是,scrapy框架能夠讓我們的爬蟲效率更高

那麼剩下的10%怎麼辦呢?在課堂上我們學習的是通用的爬蟲技能和爬蟲方法,剩下的10%大家可能以後都不會遇到

2 什麼是scrapy

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架,我們只需要實現少量的程式碼,就能夠快速的抓取。

Scrapy 使用了Twisted['twɪstɪd]非同步

網路框架,可以加快我們的下載速度。

文件地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

3 非同步和同步的區別

前面我們說Twisted是一個非同步的網路框架,經常我們也聽到一個詞語叫做非阻塞,那麼他們有什麼區別呢?

  • 非同步:呼叫在發出之後,這個呼叫就直接返回,不管有無結果
  • 非阻塞:關注的是程式在等待呼叫結果(訊息,返回值)時的狀態,指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。

4 scrapy的工作流程

4.1 回顧之前的爬蟲流程

4.2 上面的流程可以改寫為

4.3 scrapy的流程

其流程可以描述如下:

  1. 排程器把requests-->引擎-->下載中介軟體--->下載器
  2. 下載器傳送請求,獲取響應---->下載中介軟體---->引擎--->爬蟲中介軟體--->爬蟲
  3. 爬蟲提取url地址,組裝成request物件---->爬蟲中介軟體--->引擎--->排程器
  4. 爬蟲提取資料--->引擎--->管道
  5. 管道進行資料的處理和儲存

注意:

  • 圖中綠色線條的表示資料的傳遞
  • 注意圖中中介軟體的位置,決定了其作用
  • 注意其中引擎的位置,所有的模組之前相互獨立,只和引擎進行互動

4.4 scrapy中每個模組的具體作用