1. 程式人生 > >Scrapy基礎 第三節:Scrapy框架結構和元件介紹

Scrapy基礎 第三節:Scrapy框架結構和元件介紹

前置知識:

  • 掌握Python的基礎知識
  • 對爬蟲基礎有一定了解

說明: 執行環境

Win10,Python3 64位

目錄:

1 Scrapy框架組成結構

在這裡插入圖片描述

2 Scapry資料流程

Scrapy中的資料流由執行引擎控制,其過程如下:

  1. 引擎開啟一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
  2. 引擎從Spider中獲取到第一個要爬取的URL並在排程器(Scheduler)以Request排程
  3. 引擎向排程器請求下一個要爬取的URL。
  4. 排程器返回下一個要爬取的URL給引擎,引擎將URL通過下載中介軟體(請求(request)方向)轉發給下載器(Downloader)。
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中介軟體(返回(response)方向)傳送給引擎。
  6. 引擎從下載器中接收到Response並通過Spider中介軟體(輸入方向)傳送給Spider處理。
  7. Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
  8. 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給排程器。
  9. (從第二步)重複直到排程器中沒有更多地request,引擎關閉該網站。

3 Scrapy元件概覽

在這裡插入圖片描述

4 擴充套件原始碼瞭解

只是瞭解一些用法還不夠,更深入一點需要去看原始碼,scrapy也是託管在github上,專案主頁

原始碼這麼多怎麼看,最根本的還是要掌握5大核心模組是怎麼實現的,它們在原始碼中的位置:

(1) Engine:scrapy/scrapy/core/engine.py
(2) Scheduler:scrapy/scrapy/core/scheduler.py
(3) Downloader:scrapy/scrapy/core/downloader/
(4) Spider:scrapy/scrapy/spider.py
(5) Item pipeline:scrapy/scrapy/pipelines/

scrapy入口:

從scrapy_home/bin/scrapy/cmdline.py這個模組的execute()函式開始
每個具體的命令對應於一個scrapy_home/scrapy/commands包下具體的模組

scrapy/core/scheduler.py
在這裡插入圖片描述

1)對每一個引擎傳遞過來的request請求進行指紋驗證 request_seen
2) 在request_seen中會判斷request物件的指紋資訊fp,是否已經存在於集合中,如果已經存在不再請求,去掉重複
3) 如果沒有請求過,就講request物件儲存到佇列mqs中,等待被排程