PySpider 快速上手

由於工做緣由,最近一段時間都在作項目的數據建設工做,涉及到使用Pyspider進行數據的爬取及入庫,因此此處系統的整理一下;css

pyspider簡介

一個國人編寫的強大的網絡爬蟲系統並帶有強大的WebUI。 採用Python語言編寫,分佈式架構,支持多種數據庫後端,強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器。 不過目前對代理支持的話,不太好,只能支持單代理,自己不支持多代理,有兩種解決方法:html

PySpider特性

  • 用Python編寫腳本,支持Python 2. {6,7},3。{3,4,5,6}等
  • 功能強大的WebUI,包括腳本編輯器,任務監視器,項目管理器和結果查看器
  • 支持多種數據庫存儲(MySQL,MongoDB,Redis,SQLite,Elasticsearch,PostgreSQL,SQLAlchemy)
  • 支持多種消息隊列(RabbitMQ,Beanstalk,Redis,Kombu)
  • 支持爬蟲任務優先級設置,超時重爬等
  • 支持分佈式部署
  • 支持抓取Javascript頁面

PySpider組件及架構

PySpider核心組件有如下幾個:

Scheduler(調度器):

  • 從task_queue中接收任務
  • 肯定任務是新任務仍是重爬任務
  • 進行優先級排序,
  • 處理按期任務,重試丟失或失敗的任務

Fetcher(提取器):

  • 負責獲取網頁內容
  • 支持url或JavaScript的頁面(經過phantomjs) 經過PhantomJs獲取內容

Processor(處理器):

  • 負責處理內容的解析,內置PyQuery解析庫

組件之間架構圖以下:

每一個組件相互獨立,經過消息隊列鏈接,從單進程到多機分佈式靈活拓展git

存儲

Pyspider支持多種存儲,默認使用的sqlite,具體支持以下圖源碼中所列github

默認狀況下,運行的時候,運行目錄的下會生成一個data文件夾,裏面會存儲幾個db文件:web

  • project.db (存儲爬蟲項目信息,通常指的一個單獨的爬蟲腳本)
  • result.db (存儲任務執行結果信息)
  • task.db (存儲爬蟲任務信息,也就是on_start後生成的爬蟲任務信息)

PySpider使用

安裝Pyspider

安裝的話,比較簡單,只有兩步:sql

  • pip install pyspider
  • 運行命令pyspider,訪問http://localhost:5000/

首頁介紹

操做按鈕

  • Recent Active Tasks (查看最近活動的任務,會跳轉到一個頁面有列表顯示)
  • Create (建立一個新的爬蟲任務)

項目列表

  • group:分組,點擊進行修改,用於區分任務類型,能夠經過點擊表頭進行排序,要是能作成文件夾就更好了
  • project name:項目名稱,建立爬蟲項目時填寫
  • status (任務狀態,有如下幾種狀態)
    • TODO:當一個腳本剛剛被建立時的狀態
    • STOP:你能夠設置項目狀態爲STOP讓項目中止運行
    • CHECKING:當一個運行中的項目被編輯時項目狀態會被自動設置成此狀態並中止運行.
    • DEBUG/RUNNING:這兩狀態都會運行爬蟲,可是他們之間是有區別的.通常來講調試階段用DEBUG狀態,線上用RUNNING狀態.
  • rate/burst:rate:每秒執行多少個請求,burst:任務併發數,能夠點擊進行修改
  • avg time:任務平均時間
  • progress:記錄任務狀態,按時間區分,會標示任務的建立數,成功數,失敗數等值
  • actions:對爬蟲項目的一些操做
    • Run:當即執行任務,須要status爲running或debug狀態;若是在配置的調度執行時間內已經執行過,再點run是無效的,須要刪除task.db裏的數據才行(我都是直接把文件都幹掉了。。)
    • Active Tasks:查看當前爬蟲項目的活動任務
    • Results:查看活動任務結果

編輯頁面介紹

  • 左側頁面欄爲調試信息可視化,相關區域及按鈕介紹一下:數據庫

    • 上面綠色區域,爲調試信息顯示,顯示當前任務的相關信息;
      • Run:調試按鈕,點擊便可運行當前任務
      • "<",">"箭頭爲上一步下一步,用於調試過程當中切換到上一步驟
    • web:將當前拉取到的頁面內容以web形式展現(不過顯示範圍很窄。。)
    • html:顯示當前頁面的html源碼
    • follow:子任務,該任務下的子任務,點擊連接上的按鈕,便可進行下一步調試
    • messages,enable css selector helper 這兩個還不知道有啥用
  • 右側主要就是用於編寫爬蟲腳本了,新建默認腳本以下: 後端

  • 核心代碼都在BaseHandler中,Handler類繼承BaseHandler,該類在base_handler.py文件中api

  • crawl_config :爲全局配置對象,經過源碼咱們能夠看到,能夠支持不少配置,可是須要注意,配置是有做用區域的網絡

crawl_config配置屬性

  • on_start 入口方法:通常爲主頁面的方法,這名字不能改,由於源碼裏啓動的話入口方法就是on_start,其他index_page,跟detail_page沒有說強制性的,可根據本身需求起名字,就不說了;

  • @every 註解:用於定時調度,有兩個參數:minutes,seconds;分別也是表明指的多少分鐘執行一次,多少秒執行一次,代碼也在base_handler.py中

  • @config 註解:用於核心方法self.crawl的配置,在經過配置的,會做爲self.crawl的默認配置;

  • crawl 核心方法:這個方法就是告訴Pyspider抓取哪一個頁面,我目前爲止也沒都用全,完整的API點擊這裏,有很詳細的解釋

  • Response 返回對象:經過默認的示例代碼中能夠看到,經過crawl爬取返回的對象就是這個類型,能夠經過response.doc方法,將返回值轉換成PyQuery對象,剩下來的就根據需求去解析元素,提取你須要的東西了;完整API點擊這裏

總結:

由於第一次接觸爬蟲,對別的爬蟲技術也不太瞭解,很差作對比,就PySpider來講,用久了仍是方便的,特別是頁面調試,不過剛開始用的話,對Response對象不熟悉,會比較麻煩一點,畢竟沒有PyCharm經過斷點查看對象屬性來的方便; 由於總體來說,比較簡單,這裏就不上傳示例代碼了,看編輯頁面介紹截圖的代碼,就是以前爬保監會網站的代碼,能夠借鑑一下,比較簡單。 另吐槽一下開源中國 對MarkDown的支持,在編輯預覽中看到的,跟發佈出來看到的格式不同。。難受

相關文章
相關標籤/搜索