V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tikazyq
V2EX  ›  推广

爬虫管理平台 Crawlab v0.4.1 发布(可配置爬虫)

  •  2
     
  •   tikazyq · 2019-12-17 15:27:44 +08:00 · 3752 次点击
    这是一个创建于 1563 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Crawlab 是基于 Golang 的分布式爬虫管理平台,支持 Python、NodeJS、Java、Go、PHP 等多种编程语言以及多种爬虫框架。

    相信已经对 Crawlab 有所了解的同学应该大概了解 Crawlab 是一个爬虫管理平台。如果不理解什么是爬虫管理平台,建议读者先阅读《如何快速搭建实用的爬虫管理平台》。简单来说,爬虫管理平台是一种能够管理爬虫和执行、监控爬虫任务的平台,可以将爬虫操作可视化出来。而 Crawlab 作为一个灵活且强大的爬虫管理平台,从今年 3 月份上线以来,已经收获不少爬虫工程师以及开发者的好评,很多用户已经在企业中部署使用 Crawlab。现在 Crawlab 在 Github 上已经有 3.1k stars,Dockerhub 上有 7.1k pulls。另外,Crawlab 还收到了不少实际用户反馈的建议,在 Github 上已经解决了 122 个 issues,open 的还有 48 个。除了 bug 以外,其中有非常多的建设性意见,包括采用配置文件来配置怕环境、爬虫任务数据导出、更好的文件管理等等。

    Crawlab 为什么能受到用户的好评?我们总结下来,主要是 Crawlab 解决了爬虫工程师要管理很多爬虫的痛点。一般爬虫工程师需要查看爬虫任务运行情况,例如错误日志、时间等等,这些 Crawlab 都可以帮他们做到;另外爬虫工程师还需要定时执行任务,而 Crawlab 恰好也有定时任务的功能;此外,Crawlab 是 golang 写的后端,在稳定性上来说是比较强的。我们在调研了用户对 Crawlab 的定位后,发现用户任务 Crawlab 提供的最大价值是便捷性,也就是 Easiness。因此,在本次更新 v0.4.1 (严格意义上来说是 v0.4.0,但这一版有 bug )中 Crawlab 推出了另一个重大功能,可配置爬虫,能够进一步的简化抓取过程。下面我们将着重介绍一下。

    可配置爬虫简介

    如果是 Crawlab 早期的用户,可能已经对可配置爬虫这个名词不陌生,因为我们在 v0.2.1 中已经开发过这样的功能(详情见《我是如何在 3 分钟内开发完一个爬虫的》)。只是当时的版本还非常局限,仅仅支持非常简单的配置,而且稳定性也不高,实用性不强,后来就在迁移到 golang 版本的时候移除了。

    但由于很多 Crawlab 的用户都在问可配置爬虫,甚至有人在 Github 上提出了这样的 enhancement issue,我们意识到这个需求还是很普遍的。因此,这次版本更新中就将这个功能迁移回来了。但是本次更新的可配置爬虫跟 v0.2.1 版本有很大的不同,虽然同样都是基于 scrapy 框架,但不同的是 v0.4.1 版本相较于老版本来说更强大,更通用。

    下面是本次更新的可配置爬虫的截图。

    阶段( Stage )、字段( Field )配置

    流程图

    设置

    Spiderfile

    简单来说,可配置爬虫就是能够通过不写代码、只配置抓取规则的方式来编写爬虫,一个不复杂的列表+详情页的爬虫很快就写好了,大概 1-5 分钟之内就可以写完。另外 Spiderfile 是 Crawlab 新开发的定义爬虫的方式,旨在让配置爬虫更简单,就跟 Dockerfiledocker-compose.ymlJenkinsfile 等类似,利用配置代码来定义一系列操作,做到 Spider as Code。我们今后的开发将会围绕着 Spiderfile,包括爬虫所需的库、爬虫运行参数、爬虫定时任务等等,都可以在 Spiderfile 中定义,这个我们开发组后续会逐步完善。

    可配置爬虫原理

    下面,我们将介绍可配置爬虫的一些基本概念。下图是可配置爬虫中各个概念之间的关系。

    可配置爬虫包括如下元素:

    • Spiderfile:类似 Dockerfile、Jenkinsfile、docker-compose.yml 文件,是可配置爬虫的 YAML 格式的配置文件,抓取的阶段字段分页等都可以由这个文件配置;
    • 阶段( Stage ):可配置爬虫抓取的不同阶段,一个阶段通常对应一个类别页面的抓取过程,例如列表页为一个阶段,详情页为另一个阶段,在 Scrapy 中对应不同的回调函数;一个阶段中可以定义列表选择器和分页选择器以及字段定义;一个阶段中可以通过定义下一阶段,且只能定义一个。
    • 字段( Field ):字段其实就是抓取数据的字段,例如标题、URL、价格、描述等等;字段提取规则既可以用 XPath 页可以用 CSS。

    Crawlab 的可配置爬虫是基于 Scrapy 的,因此天生支持并发。而且,可配置爬虫完全支持自定义爬虫的一般功能,因此也支持任务调度、任务监控、日志监控、数据分析。其可配置原理是,Crawlab 的可配置爬虫会根据 Spiderfile 的配置规则来生成 scrapy 代码,然后让其像自定义爬虫一样运行。这样来看,可配置爬虫是一种特殊的自定义爬虫,只是其代码是由 Spiderfile 配置文件转译后生成的。

    更新详情

    0.4.1 (2019-12-13)

    Features / Enhancement

    • Spiderfile Optimization. Stages changed from dictionary to array. #358
    • Baidu Tongji Update.

    Bug Fixes

    • Unable to display schedule tasks. #353
    • Duplicate node registration. #334

    0.4.0 (2019-12-06)

    Features / Enhancement

    • Configurable Spider. Allow users to add spiders using Spiderfile to configure crawling rules.
    • Execution Mode. Allow users to select 3 modes for task execution: All Nodes, Selected Nodes and Random.

    Bug Fixes

    • Task accidentally killed. #306
    • Documentation fix. #301 #301
    • Direct deploy incompatible with Windows. #288
    • Log files lost. #269

    TODO / Roadmap

    • [ ] 结果展示: 支持 JSON 数据展示
    • [ ] 交互性: 任务列表、爬虫列表支持筛选、排序
    • [ ] 用户管理: 配置是否允许用户注册;添加、删除、修改用户
    • [ ] 文件管理: 新增、保存、删除、重命名文件
    • [ ] 定时任务: 前端生成 Cron ;与 Linux 一致;爬虫详情显示定时任务
    • [ ] 服务器: 利用 Nginx 转发将 CRAWLAB_API_ADDRESS 设置为默认 IP
    • [x] 免责声明
    • [ ] Crawlab SDK
    • [ ] Crawlab 插件

    项目地址

    社区

    如果您觉得 Crawlab 对您的日常开发或公司有帮助,请加作者微信 tikazyq1 并注明 "Crawlab",作者会将你拉入群。欢迎在 Github 上进行 star,以及,如果遇到任何问题,请随时在 Github 上提 issue。另外,欢迎您对 Crawlab 做开发贡献。

    37 条回复    2020-01-13 21:00:24 +08:00
    july1115
        1
    july1115  
       2019-12-17 15:38:34 +08:00
    改天试一试
    tikazyq
        2
    tikazyq  
    OP
       2019-12-17 15:38:52 +08:00
    @july1115 感谢关注
    chuhemiao
        3
    chuhemiao  
       2019-12-17 16:08:37 +08:00
    坐等大佬加个微信公众号爬虫
    tikazyq
        4
    tikazyq  
    OP
       2019-12-17 16:17:51 +08:00
    @chuhemiao 这个需要自己写哟
    392039757
        5
    392039757  
       2019-12-17 16:37:32 +08:00
    以前 clone 大佬代码的路过,看了下文档,对 scrapy 的支持还不是很好,目前还是使用 shell 的方式对 scrapy 进行启动和监控,如果只是小批量的爬虫可能也不需要用到分布式的架构,如果需要分布式的话 scrapy-redis 还是最简的解决方案,下午大佬以后能在这方面多做改进。( ps:很多 web 爬虫框架都烂尾了,坚持下来还是不容易,给大佬点赞)
    hmxxmh
        6
    hmxxmh  
       2019-12-17 16:44:17 +08:00
    给大佬点赞
    tikazyq
        7
    tikazyq  
    OP
       2019-12-17 16:56:34 +08:00
    @392039757 感谢你的支持,crawlab 在某些方面确实需要改进和优化,你说的几点都是潜在的可以提高的地方,其实已经有不少用户在企业里使用了,就是因为不是所有的爬虫都是 scrapy 的,总之很好的意见,我们会努力改进
    tikazyq
        8
    tikazyq  
    OP
       2019-12-17 16:56:45 +08:00
    @hmxxmh 感谢支持
    Keyes
        9
    Keyes  
       2019-12-17 17:06:21 +08:00
    提供侵入、非法控制计算机信息系统程序、工具罪了解一下
    musi
        10
    musi  
       2019-12-17 17:32:26 +08:00
    已 star,抽空学习一下
    simenet
        11
    simenet  
       2019-12-17 17:35:27 +08:00
    提供侵入、非法控制计算机信息系统程序、工具罪了解一下
    wnanbei
        12
    wnanbei  
       2019-12-17 17:55:52 +08:00
    已 star,支持一下
    SP00F
        13
    SP00F  
       2019-12-17 18:08:54 +08:00
    卖菜刀的算不算提供作案工具啊。。。楼上真的……
    tikazyq
        14
    tikazyq  
    OP
       2019-12-17 18:38:27 +08:00 via iPhone
    @Keyes 这是把瑞士军刀,用来切水果还是干坏事,看使用的人了
    tikazyq
        15
    tikazyq  
    OP
       2019-12-17 18:38:37 +08:00 via iPhone
    @musi 感谢支持
    tikazyq
        16
    tikazyq  
    OP
       2019-12-17 18:38:52 +08:00 via iPhone
    @wnanbei 感谢支持
    tikazyq
        17
    tikazyq  
    OP
       2019-12-17 18:39:11 +08:00 via iPhone
    @SP00F 非常赞同
    SP00F
        18
    SP00F  
       2019-12-17 18:54:11 +08:00
    前段时间想做爬虫来着,想用 pyspider 来着,但是感觉好久没更新了。正好学 golang 正好 GitHub 上找到你这项目,不过一直没时间部署一个用一下来着。。。
    今天在 V2 就看到作者了
    WEBUG
        19
    WEBUG  
       2019-12-17 18:58:57 +08:00 via Android
    支持自动登录吗,免代码
    tikazyq
        20
    tikazyq  
    OP
       2019-12-17 20:51:24 +08:00 via iPhone
    @SP00F 很高兴对 crawlab 感兴趣,可以多多交流
    tikazyq
        21
    tikazyq  
    OP
       2019-12-17 20:51:58 +08:00 via iPhone
    @WEBUG 暂时还不行哟,不过你可以试试自定义爬虫,这里可以运行任何形式的爬虫
    resu
        22
    resu  
       2019-12-17 21:39:48 +08:00
    马克之
    beyondragon
        23
    beyondragon  
       2019-12-17 21:53:25 +08:00
    马克支持
    Tink
        24
    Tink  
       2019-12-18 00:06:45 +08:00 via iPhone
    强大!
    tikazyq
        25
    tikazyq  
    OP
       2019-12-18 09:59:45 +08:00
    @resu 感谢支持
    tikazyq
        26
    tikazyq  
    OP
       2019-12-18 09:59:54 +08:00
    @beyondragon 感谢支持
    tikazyq
        27
    tikazyq  
    OP
       2019-12-18 10:00:02 +08:00
    @Tink 感谢支持
    guest110
        28
    guest110  
       2019-12-18 13:05:42 +08:00 via iPhone
    给大佬点赞,另外问下这个爬虫可以配置 ip 代理池吗
    tikazyq
        29
    tikazyq  
    OP
       2019-12-18 14:39:47 +08:00
    @guest110 可以,但需要自己在爬虫里设置,Crawlab 不负责配置 IP 代理池
    hmxxmh
        30
    hmxxmh  
       2019-12-18 15:39:00 +08:00
    @tikazyq 大佬,我用 docker-compose 部署了,但是只能打开首页,输入用户名和密码进不去,是什么原因呢
    tikazyq
        31
    tikazyq  
    OP
       2019-12-18 19:57:21 +08:00 via iPhone
    @hmxxmh 可以加微信 tikazyq1,拉你入群
    mcwanderer
        32
    mcwanderer  
       2019-12-18 22:23:09 +08:00
    @tikazyq 无法注册,admin 也进不去
    uc2664360
        33
    uc2664360  
       2019-12-19 21:02:36 +08:00
    @mcwanderer
    无法登陆 +1,admin 进不去,注册一直转圈圈
    tikazyq
        34
    tikazyq  
    OP
       2019-12-20 16:46:40 +08:00
    @mcwanderer 请加微信 tikazyq1 拉群讨论
    tikazyq
        35
    tikazyq  
    OP
       2019-12-20 16:46:45 +08:00
    @uc2664360 请加微信 tikazyq1 拉群讨论
    uc2664360
        36
    uc2664360  
       2020-01-13 19:26:25 +08:00
    东西估计是个好东西,但文档写的是真不行
    tikazyq
        37
    tikazyq  
    OP
       2020-01-13 21:00:24 +08:00 via iPhone
    @uc2664360 可以加作者微信私聊 tikazyq1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1250 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:56 · PVG 01:56 · LAX 10:56 · JFK 13:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.