Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)

Cola:一个分布式爬虫框架

发布时间:2013-06-17 14:58:27, 关注:+2034, 赞美:+4, 不爽:+2

本文标签: 爬虫 分布式

原始出处: 残阳似血的博客

由于早先写的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安装。增加解决依赖库安装的机制。

Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)的更多相关文章

  1. 分布式爬虫框架XXL-CRAWLER

    <分布式爬虫框架XXL-CRAWLER> 一.简介 1.1 概述 XXL-CRAWLER 是一个分布式爬虫框架.一行代码开发一个分布式爬虫,拥有"多线程.异步.IP动态代理.分布 ...

  2. 基于redis的简易分布式爬虫框架

    代码地址如下:http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需,但 ...

  3. 分布式链路跟踪系统架构SkyWalking和zipkin和pinpoint

    Net和Java基于zipkin的全链路追踪 https://www.cnblogs.com/zhangs1986/p/8966051.html 在各大厂分布式链路跟踪系统架构对比 中已经介绍了几大框 ...

  4. Dubbo[一个分布式服务框架

    http://alibaba.github.io/dubbo-doc-static/User+Guide-zh.htm#UserGuide-zh-API%E9%85%8D%E7%BD%AE http: ...

  5. Dubbo 是一个分布式服务框架

    Dubbo 是一个分布式服务框架-----http://www.cnblogs.com/chanshuyi/p/5144288.html

  6. 2020年大厂Java面试题(基础+框架+系统架构+分布式+实战)

    前言 作为一个Java开发者,Java架构师应该是大家的一个职业目标了吧. 要成为Java架构师,首先你要是一个高级Java工程师,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得 ...

  7. 设计一个分布式RPC框架

    0 前言 提前先祝大家春节快乐!好了,先简单聊聊. 我从事的是大数据开发相关的工作,主要负责的是大数据计算这块的内容.最近Hive集群跑任务总是会出现Thrift连接HS2相关问题,研究了解了下内部原 ...

  8. 【网络爬虫】【python】网络爬虫(四):scrapy爬虫框架(架构、win/linux安装、文件结构)

    scrapy框架的学习,目前个人觉得比较详尽的资料主要有两个: 1.官方教程文档.scrapy的github wiki: 2.一个很好的scrapy中文文档:http://scrapy-chs.rea ...

  9. Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合

    简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~ 首先介绍一下这个标题吧~ 1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待 ...

随机推荐

  1. larbin源码之global.h

    /** This represent a connection : we have a fixed number of them * fetchOpen links them with servers ...

  2. Cocos2d-x 学习之路------(CCCallfunc 系列)

    CCCallFunc,CCCallFuncN,CCCallFuncND,CCCallFuncO类都是调用函数来执行动作,他们的使用只是局限于他们调用的的函数的参数不同而不同 CCCallFunc的回调 ...

  3. 一个简单的AMD模块加载器

    一个简单的AMD模块加载器 参考 https://github.com/JsAaron/NodeJs-Demo/tree/master/require PS Aaron大大的比我的完整 PS 这不是一 ...

  4. 转:CSS3 Flexbox 布局介绍

    转:CSS3 Flexbox 布局介绍 Flexbox是一个用于页面布局的全新CSS3模块功能.它可以把列表放在同一个方向(从左到右或从上到下排列),并且让这些列表能延伸到占用可用的空间.较为复杂的布 ...

  5. Windows 7妙用 笔记本变无线AP轻松共享

    笔记本变AP的前提和应用原理 笔记本变AP的前提是你所处的房间或地点需要提供有线宽带的连接,而且你的笔记本要有无线网卡.如果这两个条件具备了,即使没有路由器/无线AP等辅助设备,多个笔记本电脑共享上网 ...

  6. Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建

    Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...

  7. 基于Qt的图像采集系统

    硬件 Point Gray Camera 型号:FL3-U3-13S2C-CS 参数 Sony IMX035 CMOS, 1/3", 3.63 µm Rolling Shutter 1328 ...

  8. 汉诺塔VII(递推,模拟)

    汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  9. 一个可无限伸缩且无ABA问题的无锁队列

    关于无锁队列,详细的介绍请参考陈硕先生的<无锁队列的实现>一文.然进一步,如何实现一个不限node数目即能够无限伸缩的无锁队列,即是本文的要旨. 无锁队列有两种实现形式,分别是数组与链表. ...

  10. 开发移动端web的一些知识

    由于智能机的普及,越来越多网页支持移动端了,那么如何解决适配移动端呢 在这总结一下自己的学习笔记 viewport:虚拟的容器,仅在移动设备有效 <meta name="viewpor ...