1. 程式人生 > >Python爬蟲系列之----Scrapy(一)爬蟲原理

Python爬蟲系列之----Scrapy(一)爬蟲原理

一、Scrapy簡介

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。

Scrapy 使用 Twisted這個非同步網路庫來處理網路通訊,架構清晰,並且包含了各種中介軟體介面,可以靈活的完成各種需求。

Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支援。


可以看到最新的版本是1.3。

建立一個Scrapy爬蟲一般分為以下四步:

新建專案 (Project):新建一個新的爬蟲專案
明確目標(Items):明確你想要抓取的目標
製作爬蟲(Spider):製作爬蟲開始爬取網頁
儲存內容(Pipeline):設計管道儲存爬取內容


Scrapy中幾個比較重要的部分:


items.py:用來定義需要儲存的變數,其中的變數用Field來定義,有點像python的字典。

pipelines.py:用來將提取出來的Item進行處理,處理過程按自己需要進行定義。

spiders:定義自己的爬蟲。

二、Python中常見的爬蟲框架

1、Scrapy框架

2、Crawley框架

3、Portia框架

4、newspaper框架

5、Python-goose框架

三、Scrapy核心架構


● 引擎(Scrapy Engine)

用來處理整個系統的資料流處理,觸發事務。


● 排程器(Scheduler)

用來接受引擎發過來的請求,壓入佇列中,並在引擎再次請求的時候返回。


● 下載器(Downloader)

用於下載網頁內容,並將網頁內容返回給蜘蛛。


● 蜘蛛(Spiders)

蜘蛛是主要幹活的,用它來制訂特定域名或網頁的解析規則。編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。


● 專案管道(Item Pipeline)

負責處理有蜘蛛從網頁中抽取的專案,他的主要任務是清晰、驗證和儲存資料。當頁面被蜘蛛解析後,將被髮送到專案管道,並經過幾個特定的次序處理資料。


● 下載器中介軟體(Downloader Middlewares)

位於Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。


● 蜘蛛中介軟體(Spider Middlewares)

介於Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的響應輸入和請求輸出。


● 排程中介軟體(Scheduler Middlewares)

介於Scrapy引擎和排程之間的中介軟體,從Scrapy引擎傳送到排程的請求和響應。

(一)、爬取流程

上圖綠線是資料流向,首先從初始URL開始,Scheduler會將其交給Downloader進行下載,下載之後會交給Spider進行分析,Spider分析出來的結果有兩種:

(1)、一種是需要進一步抓取的連結,例如之前分析的“下一頁”的連結,這些東西會被傳回Scheduler;

(2)、另一種是需要儲存的資料,它們則被送到Item Pipeline那裡,那是對資料進行後期處理(詳細分析、過濾、儲存等)的地方。另外,在資料流動的通道里還可以安裝各種中介軟體,進行必要的處理。

(二)、資料流

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,引擎關閉該網站。