php 爬虫抓取网页数据(一个成熟的爬虫管理流程应该包含一个管理系统,能够有效处理上述问题)
优采云 发布时间: 2022-02-28 05:25php 爬虫抓取网页数据(一个成熟的爬虫管理流程应该包含一个管理系统,能够有效处理上述问题)
这篇文章文章内容很多,涉及的知识面也很广。阅读它大约需要 20 分钟。请耐心阅读。
前言
大多数企业都离不开爬虫,而爬虫是获取数据的有效途径。对于搜索引擎来说,爬虫是必不可少的;对于舆论公司来说,爬虫是基础;对于 NLP,爬虫可以获得语料库;对于初创公司,爬虫可以获得初始内容。但是爬虫技术比较复杂,不同类型的爬虫场景会用到不同的技术。比如一个简单的静态页面可以直接用HTTP请求+HTML解析器完成;动态页面需要使用 Puppeteer 或 Selenium 等自动化测试工具;反爬网站需要使用代理、编码等技术;等等。 。因此,对爬虫有规模要求的企业或个人需要同时处理不同类型的爬虫,这将无中生有地增加大量额外的管理成本。同时,爬虫管理器还需要处理网站内容变化、持续增量爬取、任务失败等问题。因此,一个成熟的爬虫管理流程应该包括一个能够有效处理上述问题的管理系统。
了解什么是爬虫管理平台
定义
当然,上面的定义是狭隘的,通常针对的是技术人员或开发人员或技术管理人员。企业一般会自行开发内部爬虫管理系统,以应对复杂的爬虫管理需求。这样的系统就是上面定义的狭义的爬虫管理平台。
通用爬虫管理平台
什么是通用爬虫管理平台?您可能听说过 优采云(后来转换为 优采云采集器)和 优采云。前者基于云服务,可以在线编写、运行和监控爬虫,是广义爬虫平台中最接近狭义爬虫管理平台的;后者是一款流行的商业爬虫爬取工具,可以让小白用户拖放写入、运行爬虫、导出数据。你可能也见过各种API聚合服务提供者,比如Aggregate Data,它是一个可以直接调用网站接口获取数据的平台。这实际上是爬虫平台的一个变体,但它为你做了。爬虫写这个过程。而在两者之间,还有一家叫Kimonolab的外国公司,其中开发了一款名为Kimono的Chrome插件,可以让用户直观地点击页面上的元素并生成抓取规则,并在其网站@上生成爬虫程序,用户提交任务,后台可以自动抓取网站上的数据。Kimono是一款很棒的爬虫应用,可惜Kimonolab已经被大数据公司Plantir收购了,现在还不能体验。
在本文中,我们主要关注狭义的爬虫管理平台,因此后面提到的爬虫管理平台指的是狭义的。
爬虫管理平台模块
以下是一个典型的爬虫管理平台所涉及的模块。
一个典型的爬虫管理平台的模块主要包括以下几个:
当然,有些爬虫管理平台的模块可能不止这些。它可能包括其他更实用的功能,例如可配置爬虫规则、可视化配置爬虫规则、代理池、cookie 池、异常监控等。
为什么需要爬虫管理平台
有了爬虫管理平台,开发者,尤其是爬虫工程师,可以很方便的添加爬虫,执行任务,查看结果,不用在命令行之间来回切换,非常容易出错。一个常见的场景是爬虫工程师在最初的技术选型中使用了scrapy和crontab来管理爬虫任务。他必须仔细选择计划任务的时间间隔,以免填满服务器 CPU 或内存;比较难的问题是,他还需要将scrapy生成的日志保存到文件中。爬虫一旦出错,就得使用shell命令一一查看日志,定位出错原因。严重的需要一整天的时间;还有一个严重的问题,爬虫工程师可能会发现公司的业务量在增加,他需要编写数百个爬虫来满足公司的业务需求,而使用scrapy和crontab来管理是一场彻头彻尾的噩梦。可怜的爬虫工程师其实可以选择一个合适的爬虫管理平台来解决他的问题。
如何选择合适的爬虫管理平台
当您愿意解决上述爬虫工程师遇到的难题,而是想选择一个合适的爬虫管理平台时。
您应该回答的第一个问题是:我们是否需要从头开始开发系统(Start from scratch)?要回答这个问题,您应该首先回答以下问题:
如果以上三个问题的任何一个答案都是“否”,您应该考虑使用已经上市的开源爬虫管理平台来满足您的需求。
以下是市面上的开源爬虫管理平台:
总的来说,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自今年3月上线以来,深受爬虫爱好者和开发者的好评,不少用户也表示将使用Crawlab搭建公司的爬虫平台。经过几个月的迭代,Crawlab先后推出了定时任务、数据分析、网站信息、可配置爬虫、自动字段提取、下载结果、上传爬虫等功能,使平台更加实用和全面。,真正可以帮助用户解决爬虫管理的难题。如今,Github 上有近 1k 的 star,相关社区(微信群、微信公众号)也已经建立,四分之一的用户表示已将 Crawlab 应用于企业爬虫管理。
解决这个问题
Crawlab主要解决大量爬虫管理困难的问题。比如同时管理数百个网站混合的scrapy和selenium项目并不容易,命令行管理成本非常高且容易出错。Crawlab支持任何语言、任何框架,具有任务调度和任务监控,轻松有效监控和管理大型爬虫项目。
接口和使用
下面是 Crawlab 爬虫列表页面的截图。
用户只需要将爬虫上传到Crawlab,配置执行命令,点击“运行”按钮即可执行爬虫任务。爬虫任务可以在任何节点上运行。从上图可以看出,Crawlab有节点管理、爬虫管理、任务管理、定时任务、用户管理等模块。
整体结构
以下是 Crawlab 的整体架构图,由五个主要部分组成:
Crawlab的使用方法及详细原理超出本文范围文章,感兴趣的可以参考。
Github地址和Demo
使用 Docker 部署安装 Crawlab
Docker 镜像
Docker 是部署 Crawlab 最方便、最简洁的方式。其他部署方式包括直接部署,但不推荐给想要快速搭建平台的开发者。Crawlab 已经在网站上注册了相关镜像,开发者只需执行命令即可下载 Crawlab 的镜像。
读者可以去Dockerhub查看Crawlab的镜像,只有不到300Mb。地址:
安装 Docker
要使用 Docker 部署 Crawlab,您必须首先确保已安装 Docker。请参考以下文档进行安装。
安装 Docker Compose
Docker Compose 是一个运行 Docker 集群的简单工具,非常轻量级,我们将使用 Docker Compose 一键部署 Crawlab。
Docker官方网站已经有安装Docker Compose的教程,点击查看。这里有一个简单的介绍。
对于 Linux 用户,请使用以下命令进行安装。
拉图像
拉取镜像前,需要配置镜像源。因为在国内,使用原创镜像源的速度不是很快,需要使用DockerHub的国产*敏*感*词*。请创建一个文件并输入以下内容。
然后拉取镜像,就会快很多了。当然,您也可以用其他镜像源,可以网上去搜索一下。执行以下命令将 Crawlab 镜像拉取下来。
图为拉取镜像时的命令行界面。
移动爬行实验室
我们将使用 Docker Compose 启动 Crawlab 及其依赖的数据库 MongoDB 和 Redis。首先我们需要修改 Docker Compose 的 yaml 配置文件。该配置文件定义了需要启动的容器服务和网络配置。这里我们使用 Crawlab 自带的那个。
可以根据自己的要求进行配置。特别需要注意这个环境变量。由于此变量配置不正确,许多初学者用户无法登录。在大多数情况下,您不需要进行任何配置更改。请参考处理常见问题,并根据您的环境详细帮助配置 Crawlab。
之后,运行以下命令启动 Crawlab。您可以添加一个参数以使 Docker Compose 在后台运行。
执行上述命令后,Docker Compose 会拉取 MongoDB 和 Redis 镜像,这可能需要几分钟时间。拉取完成后会依次启动四个服务,在命令行中会看到如下内容。
这种情况下,应该可以看到四个服务都启动成功,可以顺利打印日志了。如果启动不成功,请微信联系作者(tikazyq1)或在Github上提出Issue。
如果在本地机器上启动Docker Compose,可以在浏览器中输入,然后就可以看到登录界面了;如果在另一台机器上启动Docker Compose,需要在浏览器中输入才能看到登录界面是其他机器的IP地址(请确保本机8080端口对外开放)。
登录用户名和密码是admin/admin,您可以使用这个用户名和密码登录。如果您的环境变量设置不正确,您可能会看到登录按钮在点击登录后一直在转圈,没有任何提示。此时,请在(将被替换为)中设置正确,重新启动。然后在浏览器中输入。
然后您将看到 Crawlab 的主页。
文章主要介绍了如何搭建爬虫管理平台Crawlab,所以我就不详细介绍如何使用Crawlab了(可以另外创建一个文章详细介绍,有兴趣的可以关注)。如果您感到困惑,请查看它以了解如何使用它。同时你也可以加作者微信(tikazyq1)并注明Crawlab,作者将你拉入讨论群,你可以在这里回答你的问题。
将 Scrapy 等爬虫集成到 Crawlab 中
众所周知,Scrapy 是一个非常流行的爬虫框架,其灵活的框架设计、高并发、易用性和可扩展性已被众多开发者和企业广泛采用。市面上几乎所有爬虫管理平台都支持Scrapy爬虫,Crawlab也不例外,但Crawlab可以运行puppeteer、selenium等其他爬虫。下面将介绍如何在Crawlab中运行scrapy爬虫。
awlab是执行爬虫的基本原理
Crawlab执行爬虫的原理很简单,其实就是一个shell命令。用户在爬虫中输入shell命令执行爬虫。例如,Crawlab 执行器会读取此命令并直接在 shell 中执行。因此,每次运行爬虫任务时,都会执行一个shell命令(当然实际情况比这要复杂得多,有兴趣的可以参考一下)。Crawlab 支持显示和导出爬虫结果,但这需要更多的工作。
写管道
要成为scrapy爬虫,无非是将爬虫抓取到的数据存储在Crawlab数据库中,然后与任务ID相关联。每次执行爬虫任务时,都会通过环境变量将任务ID传递给爬虫程序,所以我们只需要将任务ID加上结果存入数据库即可(Crawlab目前只支持MongoDB,后续会开发MySQL、SQL Server、Postgres 后来等关系型数据库,需要的用户可以关注)。
在 Scrapy 中,我们需要编写存储逻辑。原理图代码如下:
,还需要给它添加字段,保证值可以赋值(这个很重要)。
并配置爬虫
在运行爬虫之前,需要将爬虫文件上传到主节点。进行如下操作:
点击爬虫详情中的“文件”选项卡,选择一个文件,编辑文件中的代码。
接下来,需要在“概览”选项卡的“执行命令”栏中输入爬虫的shell执行命令。Crawlab的Docker镜像内置了scrapy,可以直接运行scrapy爬虫。命令是。点击“保存”按钮保存爬虫配置。
爬虫任务
然后是时候运行爬虫任务了。其实很简单,点击“概览”选项卡中的“运行”按钮,爬虫任务就会开始运行。如果日志提示找不到scrapy命令,可以改成绝对路径,运行成功。
运行状态会显示在“任务”页面或爬虫的“概览”中,每5秒更新一次,您可以在这里查看。并且在爬虫的“结果”选项卡中,您可以预览结果的详细信息,也可以将数据导出为 CSV 文件。
构建持续集成 (CI) 工作流
对于企业而言,软件开发通常是一个自动化过程。它将经历需求、开发、部署、测试和启动的步骤。这个过程一般是迭代的,需要不断的更新和发布。
<p>以爬虫为例。你启动了一个爬虫,这个爬虫会定期爬取网站数据。但突然有一天,你发现无法捕获数据。你快速定位原因,发现是