Cola:一个分布式爬虫框架

Posted 用友开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cola:一个分布式爬虫框架相关的知识,希望对你有一定的参考价值。

企业互联网技术开发者都在看!


由于早先写的WeiboCrawler问题很多,而且当时我有提到,其实可以实现一个通用的爬虫框架。最近由于要抓取新的数据,于是我就写了这个cola。下面的文字来自wiki。


Cola:一个分布式爬虫框架


Cola是一个分布式的爬虫框架,用户只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。

依赖

由于Cola配置文件使用的yaml,所以Cola只依赖于pyyaml,安装easy_install或者pip工具后,则可以:


pip install pyyaml  

安装

下载或者用gitclone源码,假设在目录/to/pth/cola,将该路径添加到Pythonpath中。


一种简单的方法是在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中配置登录的用户名和密码。这里要注意,要保证这个用户名和密码在登录时不需要验证码。

分布式模式

首先需要启动colamaster和colaworkers。分别运行根目录下bin中的start_master.py和start_worker.py


启动colamaster:

cd/to/path/cola

pythonbin/start_master.py--data/my/path/data

如果不指定--data,那么数据文件会防止在项目根目录下的data文件夹中。

启动colaworker:

pythonbin/start_worker.py--master--data/my/path/data

--data选项同master。如果不指定master,会询问是否连接到本机master,输入yes连接。

最后使用bin下的coca.py来运行指定的Colajob:

pythonbin/coca.py-m-runLocalJob/to/path/cola/contrib/wiki

-runLocalJob选项是要运行的job所在文件夹的绝对路径。输入命令后,该job会被提交到Cola集群来运行。

停止ColaJob或集群

停止整个集群,则可以运行:

pythonbin/coca.py-stopAll

而停止一个Job,则需要查询得到Job的名称:

pythonbin/coca.py-showRunningJobsNames

得到名称后,再运行:

pythonbin/coca.py-stopRunningJobByName[jobname]

编写自定义ColaJob

问题

Cola还不够稳定,目前会处于持续改进的状态。且Cola还没有在较大规模的集群上测试,但是接下来我会把Cola应用到新项目中,并逐步完善。也希望大家也能给我反馈,并帮助改进。


Todo
  • 实现一个web接口,可以查看运行的cola job以及运行情况

  • 实现一个opener能够运行JS代码和执行AJAX请求。

  • 支持增量抓取机制。

  • 简化安装,支持easy_install或者pip安装。增加解决依赖库安装的机制。






点击下方 "阅读原文" 加入企业互联网技术开发者社群
↓↓↓

以上是关于Cola:一个分布式爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章

如何设计自己的分布式爬虫框架?

爬虫,有啥框架比httpclient更快

Scrapy框架--分布式爬虫

开源爬虫框架各有啥优缺点?

JLiteSpider:轻量级的分布式java爬虫框架

现在python爬虫用scrapy框架多吗?我安了好多次都安不上