PySpider 使用說明
因為工作原因,最近一段時間都在做專案的資料建設工作,涉及到使用Pyspider進行資料的爬取及入庫,所以此處系統的整理一下;
pyspider簡介
一個國人編寫的強大的網路爬蟲系統並帶有強大的WebUI。
採用Python語言編寫,分散式架構,支援多種資料庫後端,強大的WebUI支援指令碼編輯器,任務監視器,專案管理器以及結果檢視器。 不過目前對代理支援的話,不太好,只能支援單代理,本身不支援多代理,有兩種解決方法:
- 修改原始碼,在發起請求的時候,從代理中心獲取代理地址進行配置訪問;
- 通過 類似squid方法進行獲取,詳細點 ofollow,noindex">這裡
- GitHub地址: https://github.com/binux/pyspider
- 中文網地址: http://www.pyspider.cn
PySpider特性
- 用Python編寫指令碼,支援Python 2. {6,7},3。{3,4,5,6}等
- 功能強大的WebUI,包括指令碼編輯器,任務監視器,專案管理器和結果檢視器
- 支援多種資料庫儲存(SQL/">MySQL,MongoDB,Redis,SQLite,Elasticsearch,PostgreSQL,SQLAlchemy)
- 支援多種訊息佇列(RabbitMQ,Beanstalk,Redis,Kombu)
- 支援爬蟲任務優先順序設定,超時重爬等
- 支援分散式部署
- 支援抓取Javascript頁面
PySpider元件及架構
PySpider核心元件有以下幾個:
Scheduler(排程器):
- 從task_queue中接收任務
- 確定任務是新任務還是重爬任務
- 進行優先順序排序,
- 處理定期任務,重試丟失或失敗的任務
Fetcher(提取器):
- 負責獲取網頁內容
-
支援url或JavaScript的頁面(通過phantomjs)
通過PhantomJs獲取內容
Processor(處理器):
- 負責處理內容的解析,內建PyQuery解析庫
元件之間架構圖如下:

元件流轉
每個元件相互獨立,通過訊息佇列連線,從單程序到多機分散式靈活拓展
儲存
Pyspider支援多種儲存,預設使用的sqlite,具體支援如下圖原始碼中所列

支援的資料庫
預設情況下,執行的時候,執行目錄的下會生成一個data資料夾,裡面會儲存幾個db檔案:
- project.db (儲存爬蟲專案資訊,一般指的一個單獨的爬蟲指令碼)
- result.db (儲存任務執行結果資訊)
- task.db (儲存爬蟲任務資訊,也就是on_start後生成的爬蟲任務資訊)
PySpider使用
安裝Pyspider
安裝的話,比較簡單,只有兩步:
- 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檔案中
-
crawl_config:為全域性配置物件,通過原始碼我們可以看到,可以支援很多配置,但是需要注意,配置是有作用區域的

crawl_config配置屬性
-
on_start入口方法:一般為主頁面的方法,這名字不能改,因為原始碼裡啟動的話入口方法就是on_start,其餘index_page,跟detail_page沒有說強制性的,可根據自己需求起名字,就不說了;
image
-
@every註解:用於定時排程,有兩個引數:minutes,seconds;分別也是代表指的多少分鐘執行一次,多少秒執行一次,程式碼也在base_handler.py中
-
@config註解:用於核心方法 self.crawl 的配置,在通過配置的,會作為self.crawl的預設配置;
-
crawl核心方法:這個方法就是告訴Pyspider抓取哪個頁面,我目前為止也沒都用全,完整的API點選 這裡 ,有很詳細的解釋
-
Response返回物件:通過預設的示例程式碼中可以看到,通過crawl爬取返回的物件就是這個型別,可以通過response.doc方法,將返回值轉換成PyQuery物件,剩下來的就根據需求去解析元素,提取你需要的東西了;完整API點選 這裡
總結:
因為第一次接觸爬蟲,對別的爬蟲技術也不太瞭解,不好做對比,就PySpider來說,用久了還是方便的,特別是頁面除錯,不過剛開始用的話,對Response物件不熟悉,會比較麻煩一點,畢竟沒有PyCharm通過斷點檢視物件屬性來的方便;
因為整體來講,比較簡單,這裡就不上傳示例程式碼了,看編輯頁面介紹截圖的程式碼,就是之前爬保監會網站的程式碼,可以借鑑一下,比較簡單。