Cola:一個分布式爬蟲框架
由于早先寫的WeiboCrawler問題很多,而且當時我有提到,其實可以實現一個通用的爬蟲框架。最近由于要抓取新的數據,于是我就寫了這個 cola 。下面的文字來自 wiki 。
Cola是一個分布式的爬蟲框架,用戶只需編寫幾個特定的函數,而無需關注分布式運行的細節。任務會自動分配到多臺機器上,整個過程對用戶是透明的。
依賴
由于Cola配置文件使用的yaml,所以Cola只依賴于pyyaml,安裝easy_install或者pip工具后,則可以:
pip install pyyaml
安裝
下載或者用git clone源碼,假設在目錄/to/pth/cola,將該路徑添加到Python path中。
一種簡單的方法是在site-packages中添加pth文件。site-packages因系統而異,如果是windows,假設python裝在C:\python27,那么就是C:\python27\Lib\site-packages;如果是linux,那么應該是/usr/local/lib/pythonX.X/dist-packages。
在site-packages下新建一個cola.pth文件,里面寫上路徑:/to/path/cola。
運行
Cola集群需要一個master和若干個worker,對于每臺機器,只能啟動一個worker。但是,集群不是必須的,在單機模式下亦可以運行。
Cola目前自帶了兩個爬蟲,分別是維基百科和新浪微博。在項目根目錄下的contrib中。
下面就wiki為例,分別說明如何在單機和分布式環境下運行。
依賴
無論是維基百科還是新浪微博的實現,數據都存放在MongoDB中,所以要確保MongoDB的安裝。
在wiki下的wiki.yaml和sina下的sina.yaml中可以配置MongoDB的主機和端口。
維基百科和新浪微博實現依賴于下面的幾個包:
- mechanize
- python-dateutil
- BeautifulSoup4
- mongoengine
- rsa(僅新浪微博需要)
可以使用pip或者easy_install來安裝。
單機模式
單機模式非常簡單,只需運行contrib/wiki/__init__.py即可。
cd /to/path/cola/contrib/wiki python __init__.py
要運行新浪微博的爬蟲,需要在sina.yaml中配置登錄的用戶名和密碼。這里要注意,要保證這個用戶名和密碼在登錄時不需要驗證碼。
分布式模式
首先需要啟動cola master和cola workers。分別運行根目錄下bin中的start_master.py和start_worker.py
啟動cola master:
cd /to/path/cola python bin/start_master.py --data /my/path/data
如果不指定--data,那么數據文件會防止在項目根目錄下的data文件夾中。
啟動cola worker:
python bin/start_worker.py --master --data /my/path/data
--data選項同master。如果不指定master,會詢問是否連接到本機master,輸入yes連接。
最后使用bin下的coca.py來運行指定的Cola job:
python bin/coca.py -m -runLocalJob /to/path/cola/contrib/wiki
-runLocalJob選項是要運行的job所在文件夾的絕對路徑。輸入命令后,該job會被提交到Cola集群來運行。
停止Cola Job或集群
停止整個集群,則可以運行:
python bin/coca.py -stopAll
而停止一個Job,則需要查詢得到Job的名稱:
python bin/coca.py -showRunningJobsNames
得到名稱后,再運行:
python bin/coca.py -stopRunningJobByName [job name]
編寫自定義Cola Job
見wiki 編寫自定義Cola Job 。
問題
Cola還不夠穩定,目前會處于持續改進的狀態。且Cola還沒有在較大規模的集群上測試,但是接下來我會把Cola應用到新項目中,并逐步完善。也希望大家也能給我反饋,并幫助改進。
Todo
- 實現一個web接口,可以查看運行的cola job以及運行情況
- 實現一個opener能夠運行JS代碼和執行AJAX請求。
- 支持增量抓取機制。
- 簡化安裝,支持easy_install或者pip安裝。增加解決依賴庫安裝的機制。
來自: http://qinxuye.me/article/cola-a-distributed-crawler-framework/