Pyspider

Pyspider是由國人(binux)編寫的強大的網絡爬蟲系統css

Ptspider帶有強大的WebUi / 腳本編輯器 / 任務監控器 / 項目管理器以及結果處理器。他支持多種數據庫後端 / 多種消息隊列 / Javascript 渲染頁面爬去。使用起來很是方便html

基本功能

  1. 提供了方便易用的 WebUi 系統,可視化的編寫和調試爬蟲
  2. 提供爬去進度監控 / 爬去結果查看 / 爬蟲項目管理等功能
  3. 支持多種後端數據庫,如:MySQL / MongoDB / Rides 等
  4. 支持多種消息隊列,如:RabbimMQ / Beanstalk / Redis / Kombu
  5. 提供優先級控制 / 失敗重試 / 定時抓取等
  6. 對接了PhantonJS。能夠抓取Javascript 渲染的頁面
  7. 支持單機和分佈式部署,支持 Docker 部署

Pyspider 和 Scrapy

Pyspider  - 提供了 WebUi ,爬蟲編寫 / 調試都是在WebUi 中進行的。
Scrapy    - 原生是不具有這個功能的,他採用的代碼和命令行的操做,可是能夠經過對接Portia 實現可視化配置
Pyspider  - 調試很是便捷,WebUi 操做便捷直觀
Scrapy    - 是使用parse 命令進行調試,方便程度不及Pyspider
Pyspider  - 支持PhantomJS 來進行Javascript 渲染頁面的採集。
Scrapy    - 能夠對接Scrapy-Splash組件實現,不過須要額外的配置
Pyspider  - 中內置了pyquery 做爲選擇器
Scrapy    - 對接了 Xpath / CSS 選擇器和正則
Pyspider  - 的可擴展程度不足,可配置化程度不高。
Scrapy    - 能夠經過對接Middleware / Pipelinc / Extension 等組件來實現很是強大的功能。模塊之間的耦合度低,可擴展性高

 若是要快速實現一個頁面的抓取,推薦使用 Pyspider ,開發更便捷 ,如:爬去某個新聞網站內容python

若是要對應反爬程度很大,規模較大的爬去。推薦使用 Scrapy ,如:封IP / 封帳號風險大,高頻率驗證的網站git

Pyspider 架構

Pyspider 架構主要分爲 Scheduler(調度器)/ Fetcher(抓取器)/ Processer(處理器)三個部分,整個爬去過程受到 Monitor(監控器)的監控,抓取的結果被 Result Worker(結果處理器)處理github

Scheduler 發起任務調度,Fetcher 負責抓取網頁內容,Processer負責解析網頁,而後將新生成的 Request 發送給 Scheduler 進行調度,將生成的提取結果輸出保存web

執行邏輯

Pyspider 的任務執行流程邏輯很清晰。算法

  1. 每一個 Pyspider 的項目對應一個python 腳本,該腳本中定義了一個 Handler 類,他有一個 on_start() 方法,爬去守底線調用 on_start() 方法生成最初的抓取任務。而後發送給 Scheduler 進行調度
  2. Scheduler 將抓取任務分發給 Fetcher 進行抓取,Fetcher 執行並獲得響應,隨後將響應發送給 Processer
  3. Processer 處理響應並提取出新的 URL 生成新的抓取任務,而後經過消息隊列的方式通知 Schduler 當前抓取任務執行狀況,並將新生成的抓取任務發送給 Scheduler 。若是生成了新的提取結果,則將其發送到結果隊列等待Result Worker 處理
  4. Scheduler 接收到新的的抓取任務,而後查詢數據庫,判斷其若是是新的抓取任務或者是須要重試的任務就繼續進行調度,而後將其返回給 Fetcher 進行抓取
  5. 不斷重複以上工做。直到全部的人物都執行完畢,抓取結束
  6. 抓取結束後。程序會回調 on_start() 方法,這裏能夠定義後處理過程

Pyspider基本使用

環境準備:數據庫

  • Pyspider
  • PhantomJS
  • MongoDB
  • Pymongo

在下載Pyspider 時會遇到報錯後端

在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl 中下載python 對應的版本及計算機位數瀏覽器

 切換目錄至下載文件所在目錄。進入cmd。進行安裝

而後從新打開cmd,進行pip install pyspider,若是安裝途中出現了。錯誤多試幾回。便可

運行 pyspider -- pyspider all

啓動的時候可能一直卡在result_worker starting 或者 出現報錯

ValueError: Invalid configuration: - Deprecated option 'domaincontroller': use 'http_authenticator

若是出現卡頓狀態。在出現 result_worker starting 以前 使用 CTRL + C 終止。在次啓動便可。

 

若是出現了報錯。緣由是由於WsgiDAV發佈了版本 pre-release 3.x。在安裝包中找到pyspider的資源包,而後找到webui文件裏面的webdav.py文件打開,修改第209行便可。

目標位置 : 'domaincontroller': NeedAuthController(app),


更改成 :  http_authenticator':{
            'HTTPAuthenticator':NeedAuthController(app),
        },

再次輸入pyspider all 便可

打開瀏覽器127.0.0.1:5000或者http://localhost:5000/ 打開pyspider的web UI界面,

建立項目

create --> Project Name --> Start URL(s) -- > create

 

 

 

在上面的頁面中:

  • 左側爲代碼調試界面
  • RUN爲單步調試爬蟲程序,
  • 左側下半部分能夠預覽當前的爬蟲頁面
  • 右側部分爲代碼編輯和保存

在建立好項目時。pyspider 就已經幫我生成了一小段代碼(右側部分),這裏的 Handler 就是 pyspider 爬蟲的主類。能夠在這裏定義爬蟲 / 解析 / 存儲的邏輯,整個爬蟲只須要一個 Handler 就能夠完成

在 Handler 類中:

crawl_config -- 這個類屬性能夠將整個項目的配置統一寫在這個(代理 等),配置以後全局生效
on_start() -- 這是爬蟲入口,初時的爬取請求會在這裏產生,該方法經過調用crawl() 方法便可新建一個爬取請求,它的第一個參數爲爬取的 URL,這裏會自動生成爲建立項目時輸入的 URL,crawl() 還有有一個參數爲 callback,它指定了這個頁面爬取完畢後使用哪一個方法進行解析
index_page() -- 結合上面代碼。發現。on_start() 方法。爬取結束後。將 response 交給 index_page()解析。index_page() 對接了 pyquery,直接使用 doc()來解析頁面,解析後進行了便利。調用了 crawl() 方法。又生成了新的爬取請求,同時又指定了 callback
detail_page() -- 一樣接收了 response 做爲參數。detail_page() 爬取的是詳情頁的信息,就不會產生新的請求,只對response 對象作解析,解析以後將結果以字典的形式返回

 在點擊 RUN 時。若是出現了報錯:

HTTP 599: SSL certificate problem: self signed certificate in certificate chain

在 crawl 方法中加入忽略證書驗證的參數,validate_cert=False

若是出現了:

[E 160329 14:00:56 base_handler:194] crawl() got unexpected keyword argument: ['validate_cert']

沒法匹配到 validate_cert 參數,那麼則是 PySpider 自己的問題,能夠在GitHub下載0.4.0版本

https://github.com/binux/pyspider

下載完畢後進行解壓。將 pyspider 下的全部文件目錄 更新到以前的 pyspider 中

若是。出現了web 預覽頁面大小問題。能夠在 C:\Python36\Lib\site-packages\pycparser\webui\static\debug.min.css 中 找到 iframe ,將其替換爲 iframe{border-width:0;width:100%;height:900px !important}

更改完畢後。清空瀏覽器緩存,重啓瀏覽器便可。

案列:

以去哪網爲案列

 

點擊RUN。調用on_start()方法。生成新的請求(follows提示),點擊follows,在點擊小箭頭。發起請求

能夠點擊web / html 預覽頁面和查看源代碼

能夠使用spider 提供的 CSS選擇器來定位某個標籤。來進行查找內容

點擊Save後。點擊RUN,獲取當前頁面的全部URL(代碼以前寫好的。會出現不一樣現象)

因爲要獲取多個頁面的信息。因此在代碼部分。須要添加,會看到最有最後一條是第二頁的URL

點擊其中的某一條後的小箭頭。點擊RUN。返回詳情頁的信息

利用CSS選擇器進行定位。在 detail_page 方法中進行獲取詳細信息

在項目首頁中能夠看到下面所展現

  1. group :定義分組。方便管理
  2. rate / burst :表明當前的爬取速率,rate代碼一秒發出多少個請求,burst至關於流量控制中的令牌算法的令牌數量。rate / burst 越大。爬取速率越快。
  3. progress :5m / 1h / 1d 表明最近5分鐘 / 1小時 / 一天內的請求狀況。all 表明全部的請求狀況,顏色不一樣表明不一樣的狀態,藍色表明等待被執行的請求,綠色表明成功的請求,黃色表明請求失敗後等在重試的請求,紅色表明失敗次數過多而被忽略的請求
  4. run :執行
  5. Actice Tasks :查看最近請求的詳細狀況
  6. Result :查看爬取結果

 

 以上就是pyspider 的使用

相關文章
相關標籤/搜索