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