likes
comments
collection
share

网络爬虫框架Scrapy之Scrapyd部署Scrapy项目

作者站长头像
站长
· 阅读数 8

scrapyd

Scrapyd是一个用于部署Scrapy爬虫的开源工具。它可以轻松地在多台服务器上部署和运行Scrapy爬虫,并提供了一些有用的功能,例如爬虫版本管理、调度爬虫任务、监控爬虫运行状态等。

Scrapyd的特点:

分布式扩展:Scrapyd使用Twisted框架,可以对爬虫的运行进行有效地部署和管理,实现分布式爬虫的部署和扩展。

管理界面:Scrapyd提供了一套管理界面,可以在网页中进行浏览,管理爬虫的状态、运行情况、日志信息等。

命令行接口:Scrapyd 提供了命令行接口,可以方便地管理爬虫项目。例如,可以通过命令行运行爬虫,停止爬虫等。

自定义设置:Scrapyd 可以根据需要自定义设置,例如,修改端口号、上传目录、日志等。

Scrapyd架构主要包含以下几个组件:

Scrapyd API:提供HTTP接口,用于启动、停止、调度、查看爬虫任务等操作。

Scrapyd Scheduler:爬虫任务的调度器,将爬虫任务提交到队列中,并通过Twisted框架的deferred机制异步处理。

Scrapyd Spider Runner:爬虫运行器,用于启动爬虫并处理爬虫运行过程中的异常。

Scrapyd Log Viewer:用于查看爬虫任务的运行日志。

服务器端

Scrapyd服务器是一个Web API,允许你通过HTTP POST请求来部署,运行和管理Scrapy爬虫任务。Scrapyd使用Scrapyd Web UI进行监控。Scrapyd服务器提供了许多API,允许监视Scrapy爬虫任务的情况,包括:

部署Scrapy项目(deploying a Scrapy project)

在Scrapy项目中运行爬虫任务(running a Spider within a Scrapy project)

暂停和恢复爬虫任务(pausing and resuming a Spider)

取消爬虫任务(cancelling a Spider)

获取爬虫任务列表(getting a list of Spider jobs)

获取爬虫任务状态(getting the status of a Spider job)

通过pip工具安装:

pip install scrapyd

在命令行中启动Scrapyd

scrapyd

访问

Scrapyd会默认运行在6800端口上,可以在浏览器中输入http://localhost:6800查看Scrapyd的Web界面

网络爬虫框架Scrapy之Scrapyd部署Scrapy项目

客户端

Scrapyd客户端是一个命令行界面,用于连接到Scrapyd服务器,部署,运行和管理Scrapy爬虫任务。

Scrapyd客户端提供了许多常用命令,包括:

部署Scrapy项目(deploying a Scrapy project)

运行Scrapy爬虫任务(running a Scrapy Spider)

查看Scrapy爬虫任务的日志(viewing the log of a Scrapy Spider)

取消Scrapy爬虫任务(cancelling a Scrapy Spider)

安装

pip install scrapyd-client

参数说明:

target:scrapy.cfg配置文件中 ==》 [deploy:部署名称] ==》部署名
project-name:指定需部署的项目名称
version:指定此次部署的版本号

部署 Scrapy 项目

scrapyd-deploy <target> -p <project-name> --version=<version>

获取 Scrapyd 中的所有项目

scrapyd-client projects 

列出指定项目下所有爬虫名称

scrapyd-client spiders -p 项目名称

运行 Scrapy 爬虫

scrapyd-client schedule  -p 项目名称 爬虫名称

scrapy项目部署

在使用Scrapyd时,需要将Scrapy爬虫打包成一个egg文件,并将其上传到Scrapyd服务器。上传的方式有两种:通过命令行上传,或者通过Scrapyd API上传。

配置需要部署的项目

编辑scrapy.cfg配置文件

[deploy:部署名称]
url = http://127.0.0.1:6800/ # 服务器地址
project = 项目名称

网络爬虫框架Scrapy之Scrapyd部署Scrapy项目

部署项目到scrapyd

在上传完成后,就可以使用Scrapyd API来启动、停止、调度、查看爬虫任务

scrapyd-deploy 部署名称(配置文件中设置的名称) -p 项目名称

scrapyd-deploy test -p scrapy_project
(scrapy) D:\WorkSpace\Python\scrapy_project>scrapyd-deploy test -p scrapy_project
Packing version 1678029207
Deploying to project "scrapy_project" in http://localhost:6800/addversion.json
Server response (200):
{"node_name": "Coding", "status": "ok", "project": "scrapy_project", "version": "1678029207", "spiders": 4}

部署成功之后就可以看到部署的项目 网络爬虫框架Scrapy之Scrapyd部署Scrapy项目

Web API调度Scrapy爬虫

Scrapyd的Web API是Scrapyd提供的一套以HTTP接口的方式操作爬虫的API,可以通过调用这些接口来运行爬虫、查看爬虫运行状态以及查看爬虫输出结果等。

启动爬虫

注意: curl是命令行工具,如果没有则需要额外安装

/schedule.json:用于启动爬虫。该API需要传递project(项目名称)和spider(爬虫名称)两个参数

curl http://localhost:6800/schedule.json -d project=项目名称 -d spider=爬虫名称

停止爬虫

/cancel.json:用于取消正在运行的爬虫。该API需要传递project(项目名称)和job(爬虫任务ID)两个参数

curl http://localhost:6800/cancel.json -d project=项目名称 -d job=jobid

获取项目列表

/listprojects.json:用于获取服务器上所有项目名称的列表

curl http://localhost:6800/listprojects.json

获取项目所有爬虫列表

/listspiders.json:用于获取某个项目中所有爬虫名称的列表。该API需要传递project(项目名称)参数

curl http://localhost:6800/listspiders.json?project=myproject

获取项目爬虫任务的列表

/listjobs.json:用于获取某个项目中所有爬虫任务的列表。该API需要传递project(项目名称)参数

curl http://localhost:6800/listjobs.json?project=myproject

获取爬虫运行日志

用于获取爬虫运行过程中的日志信息

curl http://localhost:6800/logs/项目名称/爬虫名称/last.txt

获取守护进程状态信息

/daemonstatus.json:用于获取Scrapyd守护进程的状态信息。这个API不需要传递任何参数

curl http://localhost:6800/daemonstatus.json

使用requests模块调度Scrapy爬虫

import requests

# 启动爬虫
url = 'http://localhost:6800/schedule.json'
data = {
    'project': 项目名,
    'spider': 爬虫名,
}
resp = requests.post(url, data=data)

# 停止爬虫
url = 'http://localhost:6800/cancel.json'
data = {
    'project': 项目名,
    'job': 启动爬虫时返回的jobid,
}
resp = requests.post(url, data=data)