Home · chineking/cola Wiki
Home
Cola
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非法关闭。
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 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+
Home · chineking/cola Wiki的更多相关文章
- 9个用来爬取网络站点的 Python 库
上期入口:10个不到500行代码的超牛Python练手项目 1️⃣Scrapy 一个开源和协作框架,用于从网站中提取所需的数据. 以快速,简单,可扩展的方式. 官网:https://scrapy.or ...
- Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)
Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs) Cola:一个分布式爬虫框架 发布时间:2013-06-17 14:58:27, 关注:+2034, 赞美: ...
- 烂泥:wiki系统confluence5.6.6安装、中文、破解及迁移
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它 ...
- Wiki安装(PHP +Sqlite+Cache)
前期准备 PHP http://windows.php.net/download WinCache Extension for PHP URL:http://sourceforge.net/pro ...
- Confluence Wiki -- 页面限制
Confluence Wiki 中 [页面设置] 应该如何理解? 当一个用户有这个权限后,这个用户可以对一个页面做限制,可以限制这个页面不能被其他用户浏览或编辑: 反之,如果没有这个权限,那么这个用户 ...
- working with fitnesse wiki pages
fitnesse提供一个简单易用的wiki创建一个web页面用于测试.测试页面有一个button,允许所有的测试在这个页面运行,因此任何人在任何时间都可以去这个页面点击这个按钮,查看测试是否通过.fi ...
- Wiki设置
在Wiki安装完成后,就wiki会提示下载LocalSettings.php文件,这是wiki的设置文件,当我们要对wiki进行设置的时候,就需要用到这个文件. 下面对常用的操作设置做简要讲解: —— ...
- Wiki安装
我们推荐使用Mediawiki. MediaWiki是基于php环境的,所以如果需要使用该类wiki,就要先部署php的环境. wiki下载: https://www.mediawiki.org/wi ...
- Wiki介绍
Wiki是一种高效的知识管理系统. 我们可以使用wiki构建自己的个人知识管理系统.
随机推荐
- 2015 Multi-University Training Contest 1
最近真是太废柴了,题没做几道,也没学什么新知识,多校做了三场也没总结~诶!好好学吧! 多校第一场感觉被完虐...orz... Hdu 5288 OO’s Sequence 题目链接:http://ac ...
- 【分享】深入浅出WPF全系列教程及源码
本人10月份提出离职,可是交接非常慢,预计年底才会交接完,趁着交接之际,自学了一下WPF,由于这是微软未来的发展趋势,自WIN7以来包含前不久公布的WIN8,核心还是WPF,在此,将自己的学习成果做一 ...
- 积累的VC编程小技巧之图标、光标及位图
1.图标透明 (1).Windows中的图标其实是有两个图像组成的,其中一个用于与它要显示的位置的图像做“AND”操作,另一个作“XOR”操作. 透明:用“白色”AND,用“黑色”XOR 反色:用“白 ...
- ANDROID 中设计模式的採用--创建型模式
所谓模式就是在某一情景下解决某个问题的固定解决方式. 全部的创建型模式都是用作对象的创建或实例化的解决方式. 1 简单工厂模式 创建对象的最简单方法是使用new来创建一个对象,假设仅仅创建一种固 ...
- xp下Oracle数据库导入SQLServer数据库数据
Oracle数据库利用ODBC数据源.PLSQL Developer导入SQLServer数据库数据 操作: 建立数据源:控制面板→管理工具→数据源 (ODBC) 打开,界面如下: 点击添加,界面如下 ...
- 奔小康赚大钱 hdu 2255
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 实时人脸检测 (Real-Time Face Detection)
源地址:http://blog.sina.com.cn/s/blog_79b67dfe0102uzra.html 最近需要用到人脸检测,于是找了篇引用广泛的论文实现了一下:Robust Real-Ti ...
- 基于Qt的类QQ气泡聊天的界面开发
近期在写IM 聊天界面,想设计出一个类似QQ气泡聊天的样式 使用了几种办法 1:使用Qt以下的QListview来实现QQ类似效果.差强人意 2:使用QWebview载入html css样式来完毕.发 ...
- vim经常使用命令总结
vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是非常主要的东西,也常常被用到,总结例如以下: v 从光标当前位置開始,光标所经过的地方会被选中,再按一下v结束. V ...
- 在navigationItem中添加搜索栏
给navigationItem中添加个搜索栏,效果和大部分程序一样.代码如下: UISearchBar *searchBar = [[UISearchBaralloc] initWithFrame:C ...