Python3網路爬蟲:初識Scrapy爬蟲框架
Python版本:python3.+
執行環境:Mac OS
IDE:pycharm
一 、前言
最近也是才自學的scrapy,所以也算是才入門,這篇部落格也是為了記錄自己所學所思,如有錯誤,望指正。
二 、初識Scrapy
1、 什麼是Scrapy
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。
簡單地說,Scrapy是一個爬蟲框架,它能爬取網站的資料。
2、 我能用Scrapy幹什麼
先來說說普通的網路爬蟲,比如使用requests進行獲取網上的資訊,比如:小說、圖片、視訊、商品價格、股市資訊… 而Scrapy,能讓這個獲取資訊的行為更加高效
3、 Scrapy是怎麼幹活的
先來看一下Scrapy的架構:
下圖是官方給的圖
其中包括的元件有
1. Scrapy Engin
這是Scrapy框架的核心,類似於電腦的cpu,所有的資料流都是在Scrapy Engin 的分配下被髮送到正確的元件
2. 排程器(Scheduler)
排程器是從引擎接受requests並將他們入隊,以便之後引擎請求他們時提供給引擎。類似於cache,將requests請求以佇列的形式暫時儲存在排程器中。
3. 下載器(Downloader)
下載器負責獲取頁面資料並提供給引擎,而後提供給spider。 下載器會從Internet獲取請求的url的頁面資料並以response的形式返回給Spider。
4. Spiders
Spiders是用於分析response,把需要的資料、url提取出來。其中,資料能儲存在item中。如果想繼續訪問獲取的url,則可以將該url,以requests請求的方式傳送到scheduler中,以等待執行。
5. Item Pipeline
Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到資料庫中)。
========以下模組先有個印象即可==========
6. 下載器中介軟體(Downloader Middlewares)
下載器中介軟體是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義程式碼來擴充套件Scrapy功能。
7. Spider中介軟體(Spider Middlewares)
Spider中介軟體是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義程式碼來擴充套件Scrapy功能。
剛開始看到這些元件的概念,對Scrapy的執行流程還是似懂非懂,但是從資料流的角度再進行分析,對Scrapy就能有一個大致的印象了。
資料流(Data flow)
Scrapy中的資料流由執行引擎控制,其過程如下:
- 引擎剛啟動時,會呼叫
start_requests
這個Spider
方法,向該方法傳送的url是從start_urls
列表中獲取的。 該方法只會在引擎剛啟動時執行,start_urls
列表則是需要自己設定的。 - 引擎從
Spider
中獲取到第一個要爬取的URL
並在排程器(Scheduler)
以requests
排程。 - 引擎向排程器請求下一個要爬取的
URL
。 - 排程器返回下一個要爬取的
URL
給引擎,引擎將URL通過下載中介軟體
(請求(requests)方向)轉發給下載器(Downloader)
。 - 一旦頁面下載完畢,下載器生成一個該頁面的
Response
,並將其通過下載中介軟體
(返回(response)方向)傳送給引擎。 - 引擎從
下載器
中接收到Response
並通過Spider中介軟體
(輸入方向)傳送給Spider
處理。 Spider
處理Response
並返回爬取到的Item
及(跟進的)新的requests
給引擎。- 引擎將(Spider返回的)爬取到的
Item
給Item Pipeline
,將(Spider返回的)requests
給排程器
。 - (從第二步)重複直到排程器中沒有更多地
requests
,引擎關閉該網站。
官方文件連結:
http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/architecture.html
三 、Scrapy的安裝
安裝前提: 已成功安裝python3
安裝方法 :
- Mac OS:
在終端鍵入命令pip3 install scrapy
- Windows:
見部落格 Python3網路爬蟲(五):Python3安裝Scrapy
四 、小結
用Scrapy寫出一個高效的多程序爬蟲是很方便的,百行程式碼不到,就能寫出一個入門的scrapy的爬蟲。而且scrapy有很高的自由度,自己能重構其中介軟體(middleware)步驟。
隨筆
可能是我學習方法的問題,每次學新的知識,光看官方文件總是看的雲裡霧裡,不得要領;看別的博主寫的部落格,常常會步驟寫著寫,然後中間就會跳個一兩步,我當時看了很久,腦子的想法就是 ? ? ?。我希望能通過把學的知識寫下來,能重構我的學習模式和學習能力 =w= 。