分布式通用爬虫管理平台 Crawlab - V2EX
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tikazyq

分布式通用爬虫管理平台 Crawlab

  •  
  •   tikazyq
    tikazyq Mar 6, 2019 5501 views
    This topic created in 2628 days ago, the information mentioned may be changed or developed.

    Crawlab

    基于 Celery 的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.

    Github: https://github.com/tikazyq/crawlab

    截图

    首页

    home

    爬虫列表

    爬虫详情 - 概览

    任务详情 - 抓取结果

    架构

    Crawlab 的架构跟 Celery 非常相似,但是加入了包括前端、爬虫、Flower 在内的额外模块,以支持爬虫管理的功能。

    节点

    节点其实就是 Celery 中的 Worker。一个节点运行时会连接到一个任务队列(例如 Redis )来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的 IP 地址和端口。

    爬虫

    自动发现

    config.py文件中,修改变量PROJECT_SOURCE_FILE_FOLDER作为爬虫项目所在的目录。Crawlab 后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?

    部署爬虫

    所有爬虫需要在抓取前被部署当相应当节点中。在"爬虫详情"页面点击"Deploy"按钮,爬虫将被部署到所有有效到节点中。

    运行爬虫

    部署爬虫之后,你可以在"爬虫详情"页面点击"Run"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。

    任务

    任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。

    后台应用

    这是一个 Flask 应用,提供了必要的 API 来支持常规操作,例如 CRUD、爬虫部署以及任务运行。每一个节点需要启动 Flask 应用来支持爬虫部署。运行python manage.py apppython ./bin/run_app.py来启动应用。

    中间者

    中间者跟 Celery 中定义的一样,作为运行异步任务的队列。

    前端

    前端其实就是一个基于Vue-Element-Admin的单页应用。其中重用了很多 Element-UI 的控件来支持相应的展示。

    数据关联

    任务是利用 python 的subprocess模块中的Popen来实现的。任务 ID 将以环境变量CRAWLAB_TASK_ID的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。

    在你的爬虫程序中,你需要将CRAWLAB_TASK_ID的值以task_id作为可以存入数据库中。这样 Crawlab 就直到如何将爬虫任务与抓取数据关联起来了。当前,Crawlab 只支持 MongoDB。

    与其他框架比较

    限制以及有一些爬虫管理框架了,因此为啥还要用 Crawlab ?

    因为很多现有当平台都依赖于 Scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用 scrapy 和 python。当然,scrapy 是非常优秀的爬虫框架,但是它不能做一切事情。

    Crawlab 使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。

    欢迎大家来加入 Crawlab 开发交流群

    11 replies    2019-03-07 10:57:38 +08:00
    TKKONE
        1
    TKKONE  
    PRO
       Mar 6, 2019 via Android
    有意思
    sunorg
        2
    sunorg  
       Mar 6, 2019 via Android
    好东西,但支持 scrapy 吗,支持的话考虑迁移过去
    congeec
        3
    congeec  
       Mar6, 2019
    中间两行多余
    ```
    col_name = os.environ.get('CRAWLAB_COLLECTION')
    if not col_name:
    col_name = 'test'
    col = db[col_name]
    ```

    col_name = os.environ.get('CRAWLAB_COLLECTION', 'test')
    bazingaterry
        4
    bazingaterry  
       Mar 6, 2019
    有点像前司的内部爬虫框架……
    sunorg
        5
    sunorg  
       Mar 7, 2019 via Android
    安装不成功
    ericgui
        6
    ericgui  
       Mar 7, 2019
    这个看着不错啊
    tikazyq
        7
    tikazyq  
    OP
       Mar 7, 2019 via iPhone
    @sunorg 报什么错?
    tikazyq
        8
    tikazyq  
    OP
       Mar 7, 2019 via iPhone
    @bazingaterry 哪个厂呢,我这全部手撸的
    tikazyq
        9
    tikazyq  
    OP
       Mar 7, 2019 via iPhone
    可选变量,为了防止报错
    julyclyde
        10
    julyclyde  
       Mar 7, 2019
    @tikazyq 这功能,估计各家实现出来都差不多吧
    tikazyq
        11
    tikazyq  
    OP
       Mar 7, 2019 via iPhone
    @julyclyde 这个是专门针对爬虫设计的,现在有很多任务调度系统,但都过于通用了
    About     Help     Advertise     Blog     API     FAQ     Solana     2961 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 15:00 PVG 23:00 LAX 08:00 JFK 11:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86