手把手教你如何用Crawlab构建技术文章聚合平台(一)

本文介绍了如何利用Crawlab分布式爬虫管理平台和Puppeteer自动化工具抓取掘金、SegmentFault及CSDN的技术文章。Crawlab提供爬虫的集中管理和监控,而Puppeteer可以模拟用户行为抓取动态内容。通过编写爬虫,数据被存储在数据库中,为构建技术文章聚合平台奠定了基础。
摘要由CSDN通过智能技术生成

背景

说到爬虫,大多数程序员想到的是scrapy这样受人欢迎的框架。scrapy的确不错,而且有很强大的生态圈,有gerapy等优秀的可视化界面。但是,它还是有一些不能做到的事情,例如在页面上做翻页点击操作、移动端抓取等等。对于这些新的需求,可以用Selenium、Puppeteer、Appium这些自动化测试框架绕开繁琐的动态内容,直接模拟用户操作进行抓取。可惜的是,这些框架不是专门的爬虫框架,不能对爬虫进行集中管理,因此对于一个多达数十个爬虫的大型项目来说有些棘手。

Crawlab是一个基于Celery的分布式通用爬虫管理平台,擅长将不同编程语言编写的爬虫整合在一处,方便监控和管理。Crawlab有精美的可视化界面,能对多个爬虫进行运行和管理。任务调度引擎是本身支持分布式架构的Celery,因此Crawlab可以天然集成分布式爬虫。有一些朋友认为Crawlab只是一个任务调度引擎,其实这样认为并不完全正确。Crawlab是类似Gerapy这样的专注于爬虫的管理平台。

本文将介绍如何使用Crawlab和Puppeteer抓取主流的技术博客文章,然后用Flask+Vue搭建一个小型的技术文章聚合平台。

Crawlab

在前一篇文章《分布式通用爬虫管理平台Crawlab》已介绍了Crawlab的架构以及安装使用,这里快速介绍一下如何安装、运行、使用Crawlab。

安装

到Crawlab的Github Repo用克隆一份到本地。

git clone https://github.com/tikazyq/crawlab

安装相应的依赖包和库。

cd crawlab

# 安装python依赖
pip install -r crawlab/requirements

# 安装前端依赖
cd frontend
npm install

安装mongodb和redis-server。Crawlab将用MongoDB作为结果集以及运行操作的储存方式,Redis作为Celery的任务队列,因此需要安装这两个数据库。

运行

在运行之前需要对Crawlab进行一些配置,配置文件为config.py

# project variables
PROJECT_SOURCE_FILE_FOLDER = '/Users/yeqing/projects/crawlab/spiders' # 爬虫源码根目录
PROJECT_DEPLOY_FILE_FOLDER = '/var/crawlab'  # 爬虫部署根目录
PROJECT_LOGS_FOLDER = '/var/logs/crawlab'  # 日志目录
PROJECT_TMP_FOLDER = '/tmp'  # 临时文件目录

# celery variables
BROKER_URL = 'redis://192.168.99.100:6379/0'  # 中间者URL,连接redis
CELERY_RESULT_BACKEND = 'mongodb://192.168.99.100:27017/'  # CELERY后台URL
CELERY_MONGODB_BACKEND_SETTINGS = {
   
    'database': 'crawlab_test',
    'taskmeta_collection': 'tasks_celery',
}
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True

# flower variables
FLOWER_API_ENDPOINT = 'http://localhost:5555/api'  # Flower服务地址

# database variables
MONGO_HOST = '192.168.99.100'
MONGO_PORT = 27017
MONGO_DB = 'crawlab_test'

# flask variables
DEBUG = True
FLASK_HOST = '127.0.0.1'
FLASK_PORT = 8000

启动后端API,也就是一个Flask App,可以直接启动,或者用gunicorn代替。

cd ../crawlab
python app.py

启动Flower服务(抱歉目前集成Flower到App服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。

python ./bin/run_flower.py

启动本地Worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。

python ./bin/run_worker.py

启动前端服务器。

cd ../frontend
npm run serve
使用

首页Home中可以看到总任务数、总爬虫数、在线节点数和总部署数,以及过去30天的任务运行数量。

点击侧边栏的Spiders或者上方到Spiders数,可以进入到爬虫列表页。

这些是爬虫源码根目录PROJECT_SOURCE_FILE_FOLDER下的爬虫。Crawlab会自动扫描该目录下的子目录,将子目录看作一个爬虫。Action列下有一些操作选项,点击部署Deploy按钮将爬虫部署到所有在线节点中。部署成功后,点击运行Run按钮,触发抓取任务。这时,任务应该已经在执行了。点击侧边栏的Tasks到任务列表,可以看到已经调度过的爬虫任务。

基本使用就是这些,但是Crawlab还能做到更多,大家可以进一步探索,详情请见Github

Puppeteer

Puppeteer是谷歌开源的基于Chromium和NodeJS的自动化测试工具,可以很方便的让程序模拟用户的操作,对浏览器进行程序化控制。Puppeteer有一些常用操作,例如点击,鼠标移动,滑动,截屏,下载文件等等。另外,Puppeteer很类似Selenium,可以定位浏览器中网页元素,将其数据抓取下来。因此,Puppeteer也成为了新的爬虫利器。

相对于Selenium,Puppeteer是新的开源项目,而且是谷歌开发,可以使用很多新的特性。对于爬虫来说,如果前端知识足够的话,写数据抓取逻辑简直不能再简单。正如其名字一样,我们是在操作木偶人来帮我们抓取数据,是不是很贴切?

掘金上已经有很多关于Puppeteer的教程了(爬虫利器 Puppeteer 实战Puppeteer 与 Chrome Headless —— 从入门到爬虫),这里只简单介绍一下Puppeteer的安装和使用。

安装

安装很简单,就一行npm install命令,npm会自动下载Chromium并安装,这个时间会比较长。为了让安装好的puppeteer模块能够被所有nodejs爬虫所共享,我们在PROJECT_DEPLOY_FILE_FOLDER目录下安装node的包。

# PROJECT_DEPLOY_FILE_FOLDER变量值
cd /var/crawlab

# 安装puppeteer
npm i puppeteer

# 安装mongodb
npm i mongodb

安装mongodb是为了后续的数据库操作。

使用

以下是Copy/Paste的一段用Puppeteer访问简书然后截屏的代码,非常简洁。

const puppeteer = require('puppeteer');

(async () => {
   
  const browser = await (puppeteer.launch
Crawlab是一个基于Golang的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP等多种编程语言以及多种爬虫框架。 Crawlab架构: Crawlab的架构包括了一个主节点(Master Node)和多个工作节点(Worker Node),以及负责通信和数据储存的Redis和MongoDB数据库。 前端应用向主节点请求数据,主节点通过MongoDB和Redis来执行任务派发调度以及部署,工作节点收到任务之后,开始执行爬虫任务,并将任务结果储存到MongoDB。架构相对于v0.3.0之前的Celery版本有所精简,去除了不必要的节点监控模块Flower,节点监控主要由Redis完成。 主节点 主节点是整个Crawlab架构的核心,属于Crawlab的中控系统。主节点负责与前端应用进行通信,并通过Redis将爬虫任务派发给工作节点。同时,主节点会同步(部署)爬虫给工作节点,通过Redis和MongoDB的GridFS。 工作节点 工作节点的主要功能是执行爬虫任务和储存抓取数据与日志,并且通过Redis的PubSub跟主节点通信。通过增加工作节点数量,Crawlab可以做到横向扩展,不同的爬虫任务可以分配到不同的节点上执行。 MongoDB MongoDB是Crawlab的运行数据库,储存有节点、爬虫、任务、定时任务等数据,另外GridFS文件储存方式是主节点储存爬虫文件并同步到工作节点的中间媒介。 Redis Redis是非常受欢迎的Key-Value数据库,在Crawlab中主要实现节点间数据通信的功能。例如,节点会将自己信息通过HSET储存在Redis的nodes哈希列表中,主节点根据哈希列表来判断在线节点。 前端 前端是一个基于Vue-Element-Admin的单页应用。其中重用了很多Element-UI的控件来支持相应的展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值