1. 程式人生 > >Python3網路爬蟲:初識Scrapy爬蟲框架

Python3網路爬蟲:初識Scrapy爬蟲框架

Python版本:python3.+
執行環境:Mac OS
IDE:pycharm

一 、前言

最近也是才自學的scrapy,所以也算是才入門,這篇部落格也是為了記錄自己所學所思,如有錯誤,望指正。

二 、初識Scrapy

1、 什麼是Scrapy

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

2、 我能用Scrapy幹什麼

先來說說普通的網路爬蟲,比如使用requests進行獲取網上的資訊,比如:小說、圖片、視訊、商品價格、股市資訊… 而Scrapy,能讓這個獲取資訊的行為更加高效

3、 Scrapy是怎麼幹活的

先來看一下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中的資料流由執行引擎控制,其過程如下:

  1. 引擎剛啟動時,會呼叫start_requests這個Spider方法,向該方法傳送的url是從start_urls列表中獲取的。 該方法只會在引擎剛啟動時執行,start_urls列表則是需要自己設定的。
  2. 引擎從Spider中獲取到第一個要爬取的URL並在排程器(Scheduler)requests排程。
  3. 引擎向排程器請求下一個要爬取的URL
  4. 排程器返回下一個要爬取的URL給引擎,引擎將URL通過下載中介軟體(請求(requests)方向)轉發給下載器(Downloader)
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中介軟體(返回(response)方向)傳送給引擎。
  6. 引擎從下載器中接收到Response並通過Spider中介軟體(輸入方向)傳送給Spider處理。
  7. Spider處理Response並返回爬取到的Item及(跟進的)新的requests給引擎。
  8. 引擎將(Spider返回的)爬取到的ItemItem Pipeline,將(Spider返回的)requests排程器
  9. (從第二步)重複直到排程器中沒有更多地requests,引擎關閉該網站。

官方文件連結:

http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/architecture.html

三 、Scrapy的安裝

安裝前提: 已成功安裝python3
安裝方法 :

四 、小結

用Scrapy寫出一個高效的多程序爬蟲是很方便的,百行程式碼不到,就能寫出一個入門的scrapy的爬蟲。而且scrapy有很高的自由度,自己能重構其中介軟體(middleware)步驟。

隨筆

可能是我學習方法的問題,每次學新的知識,光看官方文件總是看的雲裡霧裡,不得要領;看別的博主寫的部落格,常常會步驟寫著寫,然後中間就會跳個一兩步,我當時看了很久,腦子的想法就是 ? ? ?。我希望能通過把學的知識寫下來,能重構我的學習模式和學習能力 =w= 。