Scrapy框架的使用之Scrapy框架介紹

Scrapy是一個基於Twisted的異步處理框架,是純Python實現的爬蟲框架,其架構清晰,模塊之間的耦合程度低,可擴展性極強,能夠靈活完成各類需求。咱們只須要定製開發幾個模塊就能夠輕鬆實現一個爬蟲。
網絡

1. 架構介紹

首先咱們看看Scrapy框架的架構,以下圖所示。
數據結構

圖片

它能夠分爲以下的幾個部分。架構

  • Engine。引擎,處理整個系統的數據流處理、觸發事務,是整個框架的核心。app

  • Item。項目,它定義了爬取結果的數據結構,爬取的數據會被賦值成該Item對象。框架

  • Scheduler。調度器,接受引擎發過來的請求並將其加入隊列中,在引擎再次請求的時候將請求提供給引擎。異步

  • Downloader。下載器,下載網頁內容,並將網頁內容返回給蜘蛛。scrapy

  • Spiders。蜘蛛,其內定義了爬取的邏輯和網頁的解析規則,它主要負責解析響應並生成提取結果和新的請求。ide

  • Item Pipeline。項目管道,負責處理由蜘蛛從網頁中抽取的項目,它的主要任務是清洗、驗證和存儲數據。網站

  • Downloader Middlewares。下載器中間件,位於引擎和下載器之間的鉤子框架,主要處理引擎與下載器之間的請求及響應。spa

  • Spider Middlewares。蜘蛛中間件,位於引擎和蜘蛛之間的鉤子框架,主要處理蜘蛛輸入的響應和輸出的結果及新的請求。

2. 數據流

Scrapy中的數據流由引擎控制,數據流的過程以下。

  • Engine首先打開一個網站,找處處理該網站的Spider,並向該Spider請求第一個要爬取的URL。

  • Engine從Spider中獲取到第一個要爬取的URL,並經過Scheduler以Request的形式調度。

  • Engine向Scheduler請求下一個要爬取的URL。

  • Scheduler返回下一個要爬取的URL給Engine,Engine將URL經過Downloader Middlewares轉發給Downloader下載。

  • 一旦頁面下載完畢,Downloader生成該頁面的Response,並將其經過Downloader Middlewares發送給Engine。

  • Engine從下載器中接收到Response,並將其經過Spider Middlewares發送給Spider處理。

  • Spider處理Response,並返回爬取到的Item及新的Request給Engine。

  • Engine將Spider返回的Item給Item Pipeline,將新的Request給Scheduler。

  • 重複第二步到最後一步,直到Scheduler中沒有更多的Request,Engine關閉該網站,爬取結束。

經過多個組件的相互協做、不一樣組件完成工做的不一樣、組件對異步處理的支持,Scrapy最大限度地利用了網絡帶寬,大大提升了數據爬取和處理的效率。

3. 項目結構

Scrapy框架和pyspider不一樣,它是經過命令行來建立項目的,代碼的編寫仍是須要IDE。項目建立以後,項目文件結構以下所示:

scrapy.cfg
project/
    __init__.py
    items.py
    pipelines.py
    settings.py
    middlewares.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

這裏各個文件的功能描述以下。

  • scrapy.cfg:它是Scrapy項目的配置文件,其內定義了項目的配置文件路徑、部署相關信息等內容。

  • items.py:它定義Item數據結構,全部的Item的定義均可以放這裏。

  • pipelines.py:它定義Item Pipeline的實現,全部的Item Pipeline的實現均可以放這裏。

  • settings.py:它定義項目的全局配置。

  • middlewares.py:它定義Spider Middlewares和Downloader Middlewares的實現。

  • spiders:其內包含一個個Spider的實現,每一個Spider都有一個文件。

4. 結語

本節介紹了Scrapy框架的基本架構、數據流過程以及項目結構。後面咱們會詳細瞭解Scrapy的用法,感覺它的強大。

相關文章
相關標籤/搜索