首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

快速搭建python爬虫管理平台

理解什么是爬虫管理平台

定义

爬虫管理平台是一个一站式管理系统,集爬虫部署、任务调度、任务监控、结果展示等模块于一体,通常配有可视化 UI 界面,可以在 Web 端通过与 UI 界面交互来有效管理爬虫。爬虫管理平台一般来说是支持分布式的,可以在多台机器上协作运行。

当然,上述这个定义是狭义的,通常针对于技术人员或开发者或技术经理。企业内部一般都会开发自己的内部爬虫管理系统,以应对复杂的爬虫管理需求。这样的系统就是上述定义的狭义的爬虫管理平台。

广义爬虫管理平台

而什么是广义的爬虫管理平台呢?您可能听说过神箭手(后转型为后羿采集器)和八爪鱼吧。前者是基于云服务的,可以在线上编写、运行和监控爬虫,在广义爬虫平台中最接近狭义定义的爬虫管理平台;后者是一个大众的商业爬虫抓取工具,可以让小白用户拖拉拽编写、运行爬虫,导出数据。您也可能见过各种 API 聚合服务商,例如聚合数据,这是一个可以直接调用网站接口获取数据的平台,这其实也算作爬虫平台的一个变种,只是它帮你完成了爬虫编写这一过程。而介于这两者之间的呢,国外有一家叫 Kimonolab 的公司,它开发了一个叫 Kimono 的 Chrome 插件,可以让用户在页面上可视化的点击元素并生成抓取规则,并在其网站上生成爬虫程序,用户提交任务,后台就可以自动在网站上抓取数据了。Kimono 是一个伟大的爬虫应用,但可惜的是,Kimonolab 已经被大数据公司 Plantir 收购,现在也就无法体验了。

在本文中,我们主要关注狭义定义的爬虫管理平台,因此后面所讲到的爬虫管理平台都是指狭义的定义。

爬虫管理平台模块

以下是一个典型的爬虫管理平台所涉及的模块。

爬虫管理平台架构

典型爬虫管理平台的模块主要包含以下内容:

任务管理:如何执行、调度爬虫抓取任务,以及如何监控任务,包括日志监控等等;

爬虫管理:包括爬虫部署,即将开发好的爬虫部署(打包或复制)到相应的节点上,以及爬虫配置和版本管理;

节点管理:包括节点(服务器/机器)的注册和监控,以及节点之间的通信,如何监控节点性能状况等;

前端应用:包括一个可视化 UI 界面,让用户可通过与其交互,与后台应用进行通信。

当然,有些爬虫管理平台可能还不止这些模块,它可能包括其他比较实用的功能,例如可配置的抓取规则、可视化配置抓取规则、代理池、Cookie 池、异常监控等等。

为什么需要爬虫管理平台

有了爬虫管理平台,开发者特别是爬虫工程师就能够方便的添加爬虫、执行任务、查看结果,而不用在命令行之间来回切换,非常容易出错。一个常见的场景就是爬虫工程师最初技术选型用了 scrapy 和 crontab 来管理爬虫任务,他不得不小心翼翼的选择定时任务的时间区间,以至于不会将服务器 CPU 或内存占满;更棘手的问题是,他还需要将 scrapy 产生的日志存到文件里,一旦爬虫出错了,他不得不用 shell 命令一个一个来查看日志来定位错误原因,严重时会花上一个整天;还有个严重的问题,爬虫工程师可能发现公司业务量在增加,他需要写上百个爬虫来满足公司的业务需求,而用 scrapy 和 crontab 来管理完全就是个噩梦。可怜的爬虫工程师其实完全可以选择一个合适爬虫管理平台来解决他的问题。

如何选择一个合适的爬虫管理平台

当您愿意解决前面提到的爬虫工程师遇到的困难问题,而转而想选择一个合适的爬虫管理平台时。

您首先应该回答的问题是:我们是否需要从零开始开发一套系统(Start from scratch)?要回答这个问题,您应该先回答下面几个问题:

1.我们的需求是否复杂到需要完全定制化开发一套新系统(例如要求复杂的权限管理)?

2.我们的团队是否有足够的技术实力来开发这套系统(例如有经验丰富的前后端开发工程师)?

3.我们的时间资源是否足够我们开发这套系统(例如项目计划周期为一年)?

如果上述三个问题的答案任意一个为“否”,您应该好好考虑利用市面上已有的开源爬虫管理平台来满足您的需求。

以下为市面上已有的开源爬虫管理平台:

总的来说,SpiderKeeper 可能是最早的爬虫管理平台,但功能相对来说比较局限;Gerapy 虽然功能齐全,界面精美,但有不少 bug 需要处理,建议有需求的用户等待 2.0 版本;Scrapydweb是一个比较完善的爬虫管理平台,不过和前两者一样,都是基于 scrapyd 的,因此只能运行 scrapy 爬虫;而Crawlab是一个非常灵活的爬虫管理平台,可以运行 Python、Nodejs、Java、PHP、Go 写的爬虫,而且功能比较齐全,只是部署起来相对于前三者来说要麻烦一些,不过对于 Docker 使用者来说可以做到一件部署(后面我们会讲)。

因此,对于重度 scrapy 爬虫依赖的、又不想折腾的开发者,可以考虑 Scrapydweb;而对于有各种类型的、复杂技术结构的爬虫开发者来说,应该优先考虑更灵活的 Crawlab。当然,不是说 Crawlab 对 scrapy 支持不友好,Crawlab 同样可以很好的集成 scrapy,后面会介绍。

作为 Crawlab 的作者,不想王婆卖瓜,自卖自夸,作者仅仅希望将最好的技术选型推荐给开发者,让开发者根据自身的需求来决定该使用哪种爬虫管理平台。

爬虫管理平台 Crawlab 介绍简介

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

Crawlab 自今年三月份上线以来受到爬虫爱好者们和开发者们的好评,不少使用者还表示会用 Crawlab 搭建公司的爬虫平台。经过近数月的迭代,Crawlab 陆续上线了定时任务、数据分析、网站信息、可配置爬虫、自动提取字段、下载结果、上传爬虫等功能,将平台变得得更加实用,更加全面,能够真正帮助用户解决爬虫管理困难的问题。如今在 Github 上有近 1k 的 star,相关社区也建立起来,四分之一的用户表示已经将 Crawlab 应用于企业爬虫管理。可以看出,Crawlab 是受开发者们关注和喜欢的。

解决问题

Crawlab 主要解决的是大量爬虫管理困难的问题,例如需要监控上百个网站的参杂 scrapy 和 selenium 的项目不容易做到同时管理,而且命令行管理的成本非常高,还容易出错。Crawlab 支持任何语言和任何框架,配合任务调度、任务监控,很容易做到对成规模的爬虫项目进行有效监控管理。

Crawlab 爬虫列表

用户只需要将爬虫上传到 Crawlab,配置执行命令,点击“运行”按钮,就可以执行爬虫任务了。爬虫任务可以在任何节点上运行。从上图可以看到,Crawlab 有节点管理、爬虫管理、任务管理、定时任务、用户管理等模块。

整体架构

以下是 Crawlab 的整体架构图,由五大部分组成:

1.主节点(Master Node):负责任务派发、API、部署爬虫等;

2.工作节点(Worker Node):负责执行爬虫任务;

3.MongoDB 数据库:存储节点、爬虫、任务等日常运行数据;

4.Redis 数据库:储存任务消息队列、节点心跳等信息。

5.前端客户端:Vue 应用,负责前端交互和向后端请求数据。

Github地址及Demo

查看演示 DemoGithub: https://github.com/tikazyq/crawlab

使用 Docker 部署安装 Crawlab

Docker 镜像

Docker 是部署 Crawlab 最方便和简洁的方式。其他部署方式包括直接部署,不过对于想快速搭建平台的开发者来说不推荐。Crawlab 已在Dockerhub上注册了相关的镜像,开发者仅需要执行docker pull tikazyq/crawlab命令就可以将 Crawlab 的镜像下载下来。

读者可以去 Dockerhub 上查看 Crawlab 的镜像,只有仅不到 300Mb。地址:https://hub.docker.com/r/tikazyq/crawlab/tags

Dockerhub Page

安装 Docker

要使用 Docker 来部署 Crawlab,您首先得保证 Docker 已经安装好。请参考以下文档来安装。

安装 Docker Compose

Docker Compose 是简单的运行 Docker 集群的工具,非常轻量级,我们将用到 Docker Compose 来一键部署 Crawlab。

Docker 的官方网站已经有如何安装 Docker Compose 的教程,点击链接查看。这里简单介绍一下。

Linux 用户请用以下命令安装。

1

2

3

4

5

# 下载 docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`

# 将 docker-compose 变成执行文件

sudo chmod +x /usr/local/bin/docker-compose

拉取镜像

在拉取镜像之前,您需要配置一下镜像源。因为在国内,使用原有的镜像源速度不是很快,需要使用 DockerHub 在国内的加速器。请创建/etc/docker/daemon.json文件,输入如下内容。

1

2

3

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

然后拉取镜像,就会快很多了。当然,您也可以用其他镜像源,可以网上去搜索一下。执行以下命令将 Crawlab 镜像拉取下来。

1

docker pull tikazyq/crawlab:latest

下图为拉取镜像时的命令行界面。

docker pull

启动 Crawlab

我们将用 Docker Compose 启动 Crawlab 以及其依赖的数据库 MongoDB 和 Redis。首先我们需要修改一下 Docker Compose 的 yaml 配置文件docker-compose.yml。这个配置文件定义了需要启动的容器服务(Container Services)以及网络配置(Network Configuration)。这里我们用 Crawlab 自带的docker-compose.yml。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230324A01R5400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券