Cola 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Cola 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 Apache
开发语言 Python
操作系统 跨平台
软件类型 开源软件
所属分类 应用工具网络爬虫
开发厂商
地区 国产
提 交 者 BigZ
适用人群 未知
收录时间 2014-07-18

软件简介

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

依赖

首先,确保Python版本为2.6或者2.7(未来会支持3+)。由于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和weibo下的weibo.yaml中可以配置MongoDB的主机和端口。

维基百科和新浪微博实现依赖于下面的几个包:

  • mechanize

  • python-dateutil

  • BeautifulSoup4

  • mongoengine

  • rsa(仅新浪微博需要)

可以使用pip或者easy_install来安装。

单机模式

单机模式非常简单,只需运行contrib/wiki/__init__.py即可。

cd /to/path/cola/contrib/wiki
python __init__.py

要运行新浪微博的爬虫,需要在weibo.yaml中配置登录的用户名和密码。这里要注意,要保证这个用户名和密码在登录时不需要验证码。

停止则需运行stop.py,注意不能通过直接杀死进程来停止,否则会导致cola非法关闭。 如果非法关闭,确保cola不在运行的情况下,则可以运行stop.py来恢复。但无论如何,都不推荐非法关闭,否则可能遇到不可预知的错误。

python stop.py

分布式模式

首先需要启动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 <master ip address> --data /my/path/data

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

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

python bin/coca.py -m <master ip address> -runLocalJob /to/path/cola/contrib/wiki

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

停止Cola Job或集群

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

python bin/coca.py -m <master ip address> -stopAll

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

python bin/coca.py -m <master ip address> -showRunningJobsNames

得到名称后,再运行:

python bin/coca.py -m <master ip address> -stopRunningJobByName <job name>

基于Cola实现的爬虫

基于Cola实现的爬虫位于contrib/目录下。目前实现了四个爬虫:

  • wiki:维基百科。

  • weibo:新浪微博爬虫。从初始用户出发,然后是其关注和粉丝,依次类推,抓取指定个数的新浪微博用户的微博、个人信息、关注和粉丝。其中,用户微博只获取了内容、赞的个数、转发和评论的个数等等,而没有具体去获取此微博被转发和评论的内容。

  • generic(unstable):通用爬虫,只需配置,而无需修改代码。目前Cola实现了一个抽取器(cola/core /extractor),能够从网页正文中自动抽取主要内容,即去除类似边栏和底脚等内容。但是,此抽取器目前准确度还不够,效率也不够高,所以需要谨慎 使用。

  • weibosearch(unstable):新浪微博搜索的爬虫。这个爬虫使用 cola.core.opener.SpynnerOpener,基于spynner实现了一个Opener能够执行JavaScript和Ajax代 码。目前这个爬虫存在的问题是:新浪微博可能会将其识别成机器人,因此有可能会让输入验证码。

wiki和weibo之前有所提及。主要说明generic和weibosearch。

对于generic来说,主要要修改的就是配置文件:

job:
  patterns:
    - regex: http://blog.sina.com.cn/$
      name: home
      store: no
      extract: no
    - regex: http://blog.sina.com.cn/s/blog_.+
      name: article
      store: yes
      extract: yes

其中,regex表示要匹配的url的正则表达式;name是正则匹配的名称;store为yes时是存储这个网页,no为不存储;extract表示是否自动抽取网页正文,只有当store为yes的时候,extract才有作用。

对于weibosearch,其使用了spynner来执行JavaScript和Ajax代码。所以需要确保以下依赖的安装:

如果你觉得可以基于cola实现一个比较通用的第三方爬虫,比如说腾讯微博等等,欢迎将此爬虫提交到contrib/中。

编写自定义Cola Job

见wiki编写自定义Cola Job

架构和原理

cola

在Cola集群里,当一个任务被提交的时候,Cola Master和Worker会分别启动JobMaster和JobWorker。对于一个Cola Job,当JobWorker启动完成后,会通知JobMaster,JobMaster等待所有JobWorker启动完成后开始运行Job。在一个 Cola Job启动时,会启动一个消息队列(Message Queue,主要操作是put和get,worker抓取到的对象会被put到队列中,而要抓取新的对象时,只要从队列中取即可),每个 JobWorker上都存在消息队列节点,同时会有一个去重模块(bloom filter实现)。

问题

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

Roadmap

0.1版本正式推出前不会再增加新的功能了,主要目标让Cola更加稳定,并且提高cola/core/extractor的性能和精确度,完善contrib/generic和contrib/weibosearch。

0.2版本计划:

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

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

0.3版本计划:

  • 增加一个统一持久化抽象,支持保存到关系型数据库,MongoDB,文件系统,HDFS等等。

0.4版本计划:

  • 支持Python 3+


展开阅读全文

代码

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/07/18 10:17

cola-ui的使用

[toc] 官方:http://www.cola-ui.com 教程位置:http://www.cola-ui.com/guide/model API: http://www.cola-ui.com/api/cola.html , http://legacy.cola-ui.com 组件地址:http://www.cola-ui.com/docs/button 源......

0
0
发表了博客
2013/12/17 21:39

spider-roach and cola

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

0
0
发表了博客
2019/04/10 10:10

cola-ui的使用

[toc] 官网:http://www.cola-ui.com 教程位置:http://www.cola-ui.com/guide/model API: http://www.cola-ui.com/api/cola.html , http://legacy.cola-ui.com 组件地址:http://www.cola-ui.com/docs/button 源码地址:https://github.com/Cola-Org/cola-ui 产品简介 Cola UI是支持双向数据绑定的一站式前端UI框架。采...

0
0
发表于开发技能专区
2018/08/13 16:15

centos 安装Git-cola

首先安装Git sudo yum -y install git* 找到 git-all.noarch , 安装这个. sudo yum install git-all.noarch ============ 以下是git-cola的文档内容 ========== 因为貌似Centos的yum没有提供cola的下载. 我用......

0
0
发表了博客
07/17 09:47

架构简洁之道:从阿里开源应用架构COLA说起

导读:COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。 最近,同事告诉我,COLA 作为应...

0
0
07/09 14:23

架构简洁之道:从阿里开源应用架构 COLA 说起

导读:COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有...

1
8
发表于服务端专区
05/25 23:23

COLA的扩展性使用和源码研究

cola扩展点使用和设计初探 封装变化,可灵活应对程序的需求变化。 扩展点使用 步骤: 定义扩展点接口,类型可以是校验器,转换器,实体; 必须以ExtPt结尾,表示一个扩展点。 比如,我定义一个云枢的组织结构的扩展...

0
0
发表了博客
07/10 12:15

架构简洁之道:从阿里开源应用架构 COLA 说起

导读:COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。 最近,同事告诉我,COLA 作为应...

0
0
发表了博客
07/16 11:19

架构简洁之道:从阿里开源应用架构 COLA 说起

导读:COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
69 收藏
分享
返回顶部
顶部