Python3爬蟲(十六) pyspider框架
Infi-chu:
http://www.cnblogs.com/Infi-chu/
一、pyspider介紹
1.基本功能
提供WebUI可視化功能,方便編寫和調試爬蟲
提供爬取進度監控、爬取結果查看、爬蟲項目管理
支持多種數據庫,MySQL、MongoDB、Redis、SQLite、PostgreSQL等
支持多種消息隊列,RabbitMQ、Beanstalk、Redis等
提供優先級控制、失敗重試、定時抓取等
對接了PhantomJS,可實現對JavaScript頁面的抓取
支持單機、分布式、Docker部署
2.pyspider 與 scrapy 對比
pyspider提供WebUI,scrapy原生不具備此功能
pyspider調試方便
pyspider支持PhantomJS、scrapy支持scrapy-Splash組件
pyspider內置pyquery作為選擇器,scrapy對接了XPath、CSS選擇器和正則表達式
pyspider擴展程度低
3.框架設計
三大模塊:調度器(Scheduler)、抓取器(Fetcher)、處理器(Processer)
4.具體流程
1.每個pyspider項目都對用一個Python腳本,該腳本定義了一個Handler類,使用on_start()方法,開始項目,然後交由scheduler進行調度處理
2.Scheduler將抓取任務傳給Fetcher,Fetcher響應完成後,將響應傳給Processer
3.Processer處理並提取新的URL再通過消息隊列的方式傳給Scheduler,如果生成了新的提取結果,則發往結果隊列等待Result Worker處理
4.循環上述過程,直到抓取結束,結束時會調用on_finished()
5.例子
https://github.com/Infi-chu/quna
二、pyspider詳解
1.啟動:
pyspider all
2.crawl()方法
url:爬取的URL,可以定義為單個URL字符串或URL列表
callback:回調函數,指定了該URL對應的響應內容應該由哪個方法來解析
age:任務的有效時間
priority:優先級,默認為0,越大越優先
exetime:可以設置定時任務,其值是時間戳,默認是0,代表立即執行
retries:重試次數,默認是3
itag:設置判定網頁是否發生變化的節點值
auto_recrawl:開啟後,爬取任務在過期後重新執行
method:HTTP請求方式
params:定義GET請求參數
data:定義POST請求參數
files:上傳的文件,需指定文件名
user_agent:User-Agent
headers:Request Headers
cookies:Cookies,字典格式
connect_timeout:初始化連接時最長的等待時間,默認是20秒
timeout:抓取網頁的最長等待時間,默認是120秒
allow_redirects:確定是否自動處理重定向,默認是True
validate_cert:是否驗證證書,默認是True
proxy:代理
fetch_type:開啟PhantomJS渲染
js_script:頁面加載完畢後執行的JavaScript腳本
js_run_at:腳本運行位置,默認在節點結尾
js_viewport_width/js_viewport_height:JavaScript渲染頁面的窗口大小
load_images:確定是否加載圖片,默認是False
save:在不同的方法之間傳遞參數
cancel:取消任務
force_update:強制更新狀態
3.任務區分:
判斷是否為同一任務,將比較URL的MD5值是否一樣
4.全局配置:
在crawl_config中指定全局配置
5.定時爬取
通過every屬性來設置時間間隔
6.項目狀態:
TODO 剛創建還未執行
STOP 停止
CHECKING 運行的項目被修改後
DEBUG/RUNNNING 運行
PAUSE 多次出錯,掛起或暫停
7.刪除項目
將狀態設置為STOP,分組名稱修改為delete,24小時後自動刪除
Python3爬蟲(十六) pyspider框架