• Cola:一个分布式爬虫框架


    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:python27Libsite-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安装。增加解决依赖库安装的机制。
  • 相关阅读:
    乐在其中设计模式(C#) 享元模式(Flyweight Pattern)
    乐在其中设计模式(C#) 抽象工厂模式(Abstract Factory Pattern)
    新瓶旧酒ASP.NET AJAX(7) 客户端脚本编程(Sys命名空间下的类)
    [翻译]在GridView中针对鼠标单击的某一独立单元格进行编辑
    乐在其中设计模式(C#) 中介者模式(Mediator Pattern)
    [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
    [翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) 基本应用
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)各种线程相关操作类
    Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
    Winform分页控件支持表头全选操作实现
  • 原文地址:https://www.cnblogs.com/lexus/p/3595615.html
Copyright © 2020-2023  润新知