如何快速搭建python爬虫管理平台(python,开发技术)

时间:2024-04-28 04:16:33 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BApython%E7%88%AC%E8%99%AB%E7%AE%A1%E7%90%86%E5%B9%B3%E5%8F%B0

对搜索引擎来说,爬虫不可或缺;对舆情公司来说,爬虫是基础;对 NLP来说,爬虫可以获取语料;对初创公司来说,爬虫可以获取初始内容。但是爬虫技术纷繁复杂,不同类型的抓取场景会运用到不同的技术。例如,简单的静态页面可以用 HTTP 请求+HTML 解析器直接搞定;一个动态页面需要用 Puppeteer 或 Selenium等自动化测试工具;有反爬的网站需要用到代理、打码等技术;等等。那么此时就需要一个成熟的爬虫管理平台,帮助企业或个人处理大量的爬虫类别。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

读者可以去 Dockerhub 上查看 Crawlab 的镜像,只有仅不到 300Mb。

要使用 Docker 来部署 Crawlab,您首先得保证 Docker 已经安装好。

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

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

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

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

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

如何快速搭建python爬虫管理平台

docker pull

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

读者可以根据自己的要求来配置docker-compose.yml。尤其需要注意CRAWLAB_API_ADDRESS这个环境变量,很多初学使用者都是因为该变量配置不正确而导致无法登陆。大多数情况,您不用做任何配置更改。请参考Q&A来处理常见问题,以及详细的环境变量配置文档来帮助根据自身环境配置 Crawlab。

然后,运行下列命令启动 Crawlab。可以加一个-d参数让 Docker Compose 后台运行。

运行上述命令后,Docker Compose 会去拉取 MongoDB 和 Redis 的镜像,这可能会花几分钟时间。拉取完毕后,四个服务会依次启动,您将会在命令行中看到如下内容。

正常情况下,您应该可以看到四个服务都启动成功,并能够顺利打印日志。

如果您是在本机上启动的 Docker Compose,可以在浏览器中输入http://localhost:8080,然后就能看到登陆界面了;如果您是在其他机器上启动的 Docker Compose,您需要在浏览器中输入http://<your_ip>:8080来看到登陆界面,<your_ip>是其他机器的 IP 地址(请保证 8080 端口在该机器已对外开放)。

初始登陆用户名密码是 admin/admin,您可以使用这个用户名密码来登陆。如果您的环境变量CRAWLAB_API_ADDRESS设置得不正确,您可能会看到点击登陆后登陆按钮会一直转圈而没有任何提示。这时请重新在docker-compose.yml中设置正确的CRAWLAB_API_ADDRESS(将localhost替换为<your_ip>),重新启动docker-compose up。然后在浏览器中输入http://<your_ip>:8080。

登陆之后您将看到 Crawlab 的主页。

众所周知,Scrapy 是非常受欢迎的爬虫框架,其灵活的框架设计、高并发、易用性以及可扩展性让很多开发者和企业大量采用。市面上的爬虫管理平台几乎都支持 Scrapy 爬虫,Crawlab 也不例外,但 Crawlab 可以运行 puppeteer、selenium 等其他爬虫。下面将介绍一下在 Crawlab 中如何运行 scrapy 爬虫。

Crawlab 执行爬虫的原理很简单,其实就是一个 shell 命令。用户在爬虫中输入执行爬虫的 shell 命令,例如scrapy crawl some_spider,Crawlab 执行器会读取这个命令,并在 shell 中直接执行。因此,每一次运行爬虫任务,就是执行了一次 shell 命令(当然,实际情况要比这个复杂很多,感兴趣的可以去参考官方文档)。Crawlab 是支持展示和导出爬虫结果的,不过这需要稍微多做一些工作。

要集成 scrapy 爬虫,无非就是将爬虫抓取的数据存到 Crawlab 的数据库里,然后用任务 ID 关联起来。每次执行爬虫任务,任务 ID 会通过环境变量传到爬虫程序中,因此我们需要做的就是将任务 ID 加上结果存到数据库里(Crawlab 现在只支持 MongoDB,后期会开发 MySQL、SQL Server、Postgres 等关系型数据库,有需求的用户可以关注一下)。

在 Scrapy 中,我们需要编写储存逻辑。示意代码如下:

同时,您也需要在items.py中加入task_id字段,已保证值能够被赋上(这很重要)。

在运行爬虫之前,您需要上传爬虫文件到主节点。步骤如下:

1.将爬虫文件打包成 zip(注意,要保证在根目录下直接打包);

2.在侧边栏点击“爬虫”导航至爬虫列表,点击“添加爬虫”按钮,选择“自定义爬虫”;

3.点击“上传”按钮,选择刚刚打包好的 zip 文件

4.上传成功后,爬虫列表中会出现新添加的自定义爬虫,这样就算上传成功了。

可以在爬虫详情中点击“文件”标签,选择一个文件,可以在文件中编辑代码。

接下来,您需要在“概览”标签中的“执行命令”一栏输入爬虫的 shell 执行命令。Crawlab 的 Docker 镜像里是内置了 scrapy 的,因此可以直接运行 scrapy 爬虫。命令就是scrapy crawl <some_spider>。点击“保存”按钮保存爬虫配置。

然后就是运行爬虫任务了。其实很简单,在“概览”标签中点击“运行”按钮,爬虫任务就开始运行了。如果日志提示找不到 scrapy 命令,可以将scrapy改为绝对路径/usr/local/bin/scrapy,这样就会运行成功。

任务运行情况会在“任务”页面或者爬虫“概览”里展现,会每 5 秒钟更新一次,大家可以在这上面查看。而且在爬虫“结果”标签里,可以预览结果的详情,还可以导出数据成 CSV 文件。

对于企业来说,软件开发一般是一个自动化过程。它会经历需求、开发、部署、测试、上线这几个步骤。而这个流程一般是不断迭代(Iterative)的,需要不断更新和发布。

当我们更新了代码,我们需要将更新后的代码发布到线上服务器。这时您需要用自己写部署脚本,或者更方便的,用 Jenkins 作为持续集成(Continuous Integration)管理平台。Jenkins 是一个持续集成平台,可以通过获取版本库来更新部署代码,是非常实用的工具,在很多企业中都有用到。下图是如何将 Crawlab 爬虫应用到持续集成工作流程中的例子。

要在 Crawlab 中创建或更新爬虫有两种方式:

1.上传打包成后的 zip 文件;

2.通过更改主节点中目录CRAWLAB_SPIDER_PATH中的爬虫文件。

我们做持续集成,就是针对第二种方式。步骤如下:

1.用 Gitlab 或其他平台搭建好代码仓库;

2.在 Jenkins 中创建一个项目,在项目中将代码源指向之前创建的仓库;

3.在 Jenkins 项目中编写工作流,将发布地址指向 Crawlab 的CRAWLAB_SPIDER_PATH,如果是 Docker 注意将该地址挂载到宿主机文件系统;

4.Jenkins 项目的工作可以直接编写,也可以用 Jenkinsfile,具体可以查相关资料;

5.这样,每一次代码更新提交到代码仓库后,Jenkins 就会将更新后的代码发布到 Crawlab 里,Crawlab 主节点会将爬虫代码同步到工作节点,以待抓取。

本文:如何快速搭建python爬虫管理平台的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python元编程知识点有哪些下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18