Cola:一個分布式爬蟲框架

jopen 8年前發布 | 15K 次閱讀 分布式系統 Python 網絡爬蟲

由于早先寫的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/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!