在咱們日常的爬蟲使用過程當中,只是簡單的利用 requsets, xpath 等爬蟲庫,遠遠沒法達到一個爬蟲框架的要求。一個爬蟲框架的雛形,應該包含調度器、隊列、請求對象等。咱們平時寫的爬蟲程序,連最基本的框架都不具有。python
可是這樣的架構和模塊仍是太簡單,遠遠達不到一個框架的要求。若是咱們將各個組件獨立出來,定義成不一樣的模塊,也就慢慢造成了一個框架。git
有了框架以後,咱們就沒必要關心爬蟲的所有流程,異常處理、任務調度等都會集成在框架中。咱們只須要關心爬蟲的核心邏輯部分便可,如頁面信息的提取,下一步請求的生成等。這樣,不只開發效率會提升不少,並且爬蟲的健壯性也更強。github
在項目實戰過程當中,咱們每每會採用爬蟲框架來實現抓取,這樣可提高開發效率、節省開發時間。而 pyspider 就是一個很是優秀的爬從框架,它的操做便捷、功能強大、利用它咱們能夠快速方便地完成爬蟲的開發。數據庫
pyspider 是由國人 binux 編寫的強大的網絡爬從系統,它帶有強大的 WebUI、腳本編輯器、任務監控器、項目管理以及結果處理器,它支持多種數據庫後端、多種消息隊列、JavaScript 渲染頁面的爬取。使用起來很是方便。後端
其 GiHub 地址爲:網絡
https://github.com/binux/pysp...架構
官方文檔地址:框架
pyspider 的功能有以下幾點:分佈式
1 提供方便易用的 WebUI 系統,可視化地編寫和調式爬蟲
2 提供爬取進度監控、爬取結果查看、爬蟲項目管理等功能。
3 支持多種後端數據庫,如 MySQL、MongoDB、Reids、SQLite、Elasticsearch、PostgreSQL。
4 支持多種消息隊列、如 RabbitMQ、Beanstalk、Redis、Kombu。
5 提供優先級控制、失敗重試、定時抓取等功能。
6 對接了 PhantomJS、能夠抓取 JavaScript 渲染的頁面。
7 支持單機和分佈式部署、支持 Docker 部署。
若是想要快速方便地實現一個頁面的抓取,使用 pyspider 不失爲一個好的選擇。如快速抓取某個普通新聞網站的新聞內容。但若是應對反爬程度很強、超大規模的抓取、推薦使用 Scrapy、如抓取封 IP、封帳號、高頻驗證的網站的大規模數據採集。
pyspider 的架構主要分爲 Scheduler(調度器)、Fetcher(抓取器)、Processer(處理器)三個部分。整個爬取過程受到 Monitor(監控器)的監控,抓取的結果被 Result Worker(結果處理器)處理。
Scheduler 發起任務調度,Fetcher 負責抓取網頁內容,Processer 負責解析網頁內容,而後將新生成的 Request 發給 Scheduler 進行調度,將生成的提取結果輸出保存。
pyspider 的任務執行流程的邏輯很清晰,具體過程以下所示:
1 每一個 pysipder 的項目對應一個 Python 腳本,該腳本定義了一個 Handler 類,它有一個 on_start() 方法。爬取首先調用 on_start() 方法生成最初的抓取任務,而後發送給 Scheduler。
2 Scheduler 將抓取任務分發給 Fetcher 進行抓取,Fetcher 執行並獲得響應、隨後將響應發送給 Processer。
3 Processer 處理響應並提取出新的 URL 生成新的抓取任務,而後經過消息隊列的方式通知 Scheduler 當前抓取任務執行狀況,並將新生成的抓取任務發送給 Scheduler。若是生成了新的提取結果,則將其發送到結果隊列等待 Result Worker 處理。
4 Scheduler 接收到新的抓取任務,而後查詢數據庫,判斷其若是是新的抓取任務或者是須要重試的任務就繼續進行調度,而後將其發送回 Fetcher 進行抓取。
5 不斷重複以上工做、直到全部的任務都執行完畢,抓取結束。
6 抓取結束後、程序會回調 on_finished() 方法,這裏能夠定義後處理過程。
今天帶你們瞭解下 pyspider 的基本功能和架構,對 pysider 有個總體的認知。接下來會在出篇 pysipder 實戰項目,帶你更進一步瞭解 pysipder 的使用。
本文來源於公衆號「癡海」,天天分享 python 乾貨,回覆「1024」,你懂得。