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

scrapyd

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

Scrapyd的特点:

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

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

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

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

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

arduino 复制代码
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爬虫任务的情况,包括:

css 复制代码
部署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工具安装:

python 复制代码
pip install scrapyd

在命令行中启动Scrapyd

python 复制代码
scrapyd

访问

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

客户端

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

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

css 复制代码
部署Scrapy项目(deploying a Scrapy project)

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

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

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

安装

python 复制代码
pip install scrapyd-client

参数说明:

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

部署 Scrapy 项目

python 复制代码
scrapyd-deploy <target> -p <project-name> --version=<version>

获取 Scrapyd 中的所有项目

python 复制代码
scrapyd-client projects 

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

python 复制代码
scrapyd-client spiders -p 项目名称

运行 Scrapy 爬虫

python 复制代码
scrapyd-client schedule  -p 项目名称 爬虫名称

scrapy项目部署

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

配置需要部署的项目

编辑scrapy.cfg配置文件

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

部署项目到scrapyd

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

python 复制代码
scrapyd-deploy 部署名称(配置文件中设置的名称) -p 项目名称

scrapyd-deploy test -p scrapy_project
python 复制代码
(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}

部署成功之后就可以看到部署的项目

Web API调度Scrapy爬虫

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

启动爬虫

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

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

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

停止爬虫

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

python 复制代码
curl http://localhost:6800/cancel.json -d project=项目名称 -d job=jobid

获取项目列表

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

python 复制代码
curl http://localhost:6800/listprojects.json

获取项目所有爬虫列表

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

python 复制代码
curl http://localhost:6800/listspiders.json?project=myproject

获取项目爬虫任务的列表

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

python 复制代码
curl http://localhost:6800/listjobs.json?project=myproject

获取爬虫运行日志

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

python 复制代码
curl http://localhost:6800/logs/项目名称/爬虫名称/last.txt

获取守护进程状态信息

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

python 复制代码
curl http://localhost:6800/daemonstatus.json

使用requests模块调度Scrapy爬虫

python 复制代码
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)
相关推荐
充值修改昵称13 小时前
数据结构基础:B树磁盘IO优化的数据结构艺术
数据结构·b树·python·算法
C系语言13 小时前
python用pip生成requirements.txt
开发语言·python·pip
william_djj13 小时前
python3.8 提取xlsx表格内容填入单个文件
windows·python·xlsx
kszlgy18 小时前
Day 52 神经网络调参指南
python
wrj的博客20 小时前
python环境安装
python·学习·环境配置
Pyeako20 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
不叫猫先生20 小时前
SERP企业级AI高效爬虫,告别延迟,大规模抓取高效落地
爬虫
摘星编程21 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
充值修改昵称21 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
q_35488851531 天前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法