Crawlab 网络爬虫管理
第 1 节 概述
Crawlab 是强大的 网络爬虫管理平台(WCMP),它能够运行多种编程语言(包括 Python、Go、Node.js、Java、C#)或爬虫框架(包括 Scrapy、Colly、Selenium、Puppeteer)开发的网路爬虫。它能够用来运行、管理和监控网络爬虫,特别是对可溯性、可扩展性以及稳定性要求较高的生产环境。
1.1 基本组成
graph TD; Spider -->|belongs to| Project; Spider -->|has| Schedule; Spider -->|runs| Task; Schedule -->|triggers| Task; Task -->|runs on| Node;
graph TD; Spider -->|belongs to| Project; Spider -->|has| Schedule; Spider -->|runs| Task; Schedule -->|triggers| Task; Task -->|runs on| Node;
graph TD; Spider -->|belongs to| Project; Spider -->|has| Schedule; Spider -->|runs| Task; Schedule -->|triggers| Task; Task -->|runs on| Node;
graph TD; Spider -->|belongs to| Project; Spider -->|has| Schedule; Spider -->|runs| Task; Schedule -->|triggers| Task; Task -->|runs on| Node;
-
Crawlab 中的基本单位是
Spider,一个Spider代表一个爬虫项目 -
多个
Spider可以组成一个Project,代表同类爬虫项目,Spider也可以单独运行 -
Spider可以直接手动运行,生成一个Task,也可以创建Schedule,通过Schedule触发运行生成Task -
Task运行在Node上,一个Node代表一台服务器,Node由一台Master服务器和若干Worker服务器组成 -
通常任务仅需一台
Master服务器即可,官方不建议在一台服务器上搭建多个Node -
在一台服务器上搭建多个
Node可以较为简单地实现多进程爬虫,对于爬虫任务比较多或者CPU密集型的任务可能会有作用
1.2 数据集成
Scrapy
在 settings.py 文件中,将 crawlab.CrawlabPipeline 添加到 Item_PIPELINES 中,可以自动存储爬取到的数据:
|
|
去item.py中新增一个Item,并且yield item即可。
Python
将爬取到的数据通过以下方式手动保存:
|
|
Selenium
selenium 中和 python 一样需要手动保存数据,此外还需要无头浏览器等设置以保证正常运行:
|
|
1.3 数据库
目前 Crawlab 支持MongoDB、MySQL、PostgreSQL、SQL Server、SQLite、CockroachDB、ElasticSearch、Kafka等多种数据库。
对于MongoDB这种 NoSQL 的数据库,Crawlab 处理起来是非常简单的,直接使用上面所说的数据集成方法,无需手动创建数据库,就可以一步到位实现数据存储,并且可以实现数据的扩展,灵活性较好。但是,由于没有数据类型,实际进行数据分析时,会遇到一些问题。
所以就本人经验而言,对于结构化的数据,为了数据分析时更加轻松,还是尽可能使用关系型数据库会更好一些。使用关系型数据库需要提前构建数据表,Crawlab并不支持自动创建关系型数据表,并且类型推断结果也不准确。

需要手动额外创建的字段有两个_id和_tid
_id是主键,需要设置成自增,比如在MySQL中可以设置数据类型为bigint_tid是任务的 ID 号,相同 ID 号的数据表明是在同一次任务中添加的,数据值由 Crawlab 来添加,数据类型为字符串,对于是否为主键没有要求,比如在MySQL中可以设置数据类型为varchar
1.4 定时任务
定时任务采用 Cron 表达式来表示执行任务的周期:
|
|

第 2 节 Crawlab 运行 Scrapy 项目
2.1 创建项目
|
|
2.2 编写爬虫程序
这里通过一个官方示例进行说明:快速教程
打开 scrapy_quotes/scrapy_quotes/spiders/quotes.py 并将如下内容替换掉原文件内容。
|
|
然后打开文件 scrapy_quotes/scrapy_quotes/settings.py 并将如下代码加入到文件最后。
|
|
2.3 创建 Crawlab 爬虫
爬虫->新建爬虫

|
|
2.4 从 Git 拉取 Scrapy 项目

2.5 运行爬虫

2.6 查看执行情况
爬取到的数据如下:
