Infi-chu:git
http://www.cnblogs.com/Infi-chu/github
1、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()cookie
5.例子
https://github.com/Infi-chu/quna框架
2、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小時後自動刪除
scrapy