scrapyd介绍
Scrapyd 是一个运行 Scrapy 爬虫的服务程序,它提供一系列 HTTP 接口来帮助我们部署、启动、停止、删除爬虫程序。Scrapyd 支持版本管理,同时还可以管理多个爬虫任务,利用它我们可以非常方便地完成 Scrapy 爬虫项目的部署任务调度。
感觉网上对scrapyd的介绍和部署都不是很清楚。可能用scrapy做多项目的人不多。 我最近用了一下 感觉对用户还算是相对友好。
今天来简单介绍一下
这里提供一下官方网址:https://scrapyd.readthedocs.io/en/latest/
scrapyd 安装
#服务端
pip install scrapyd
#客户端
pip install scrapyd-client
这里呢就算是安装好了。这里有两个坑。
第一就是有的人安装完了scapyd 没有这个命令
- 可以尝试重启
- 如果你是使用anconda等环境 记得要切换到指定的虚拟环境下。
- 如果你是全局环境安装 可以试着加进环境变量里(慎用)
运行
这里呢 直接运行
scrapyd
就能看到web页面了。这里插图片我觉得不方便就不插入了。
等看到页面其实就代表部署完毕了。
部署scrapy项目
一切都搞好了之后。我们来部署。打开我们事先创建好的项目
打开scrapy项目之后,有一个scrapy.cfg的配置文件:
这个文件就是给下文的scrapyd-deploy
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = xxx.settings
[deploy:test]
url = http://localhost:6800/
project = xxx
这里简单介绍一下
- [deploy:test]中的test——项目名 (随便取)
- project = xxx的project 工程名 (你创建 项目时使用的名字)
要记得吧url前面的#号删除哦
部署scrapy项目到scrapyd
其实这里有两种部署方式。
- 通过url部署
https://scrapyd.readthedocs.io/en/stable/api.html#addversion-json 官网上也有写 我这里写的还是不全
curl http://localhost:6800/addversion.json -F project=xxx -F version=r23 -F egg=@myproject.egg
window下环境配置。
到python虚拟环境下找到 Scripts/scrapyd-deploy
新建scrapyd-deploy.bat
然后写上如下脚本
@echo off
"E:\xxx\xxx\Scripts\python.exe" "E:\xxx\xxx\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9
这个xxx根据自己的环境来。万变不离其宗
然后,进入到我们爬虫的根目录,运行scrapyd-deploy
打包scrapy
命令如下
# 部署单个服务器单个项目
scrapyd-deploy <target> -p <project> --version <version>
# 部署全部服务器单个项目
scrapyd-deploy -a -p <project>
scrapyd-deploy 部署名(配置文件中设置的名称) -p 项目名称
这里部署的命令为
scrapyd-deploy test(服务名) -p xxx(项目名)
其他的一些接口链接如下
-
获取状态
http://127.0.0.1:6800/daemonstatus.json
-
获取项目列表
http://127.0.0.1:6800/listprojects.json
-
获取项目下已发布的爬虫列表
http://127.0.0.1:6800/listspiders.json?project=myproject
-
获取项目下已发布的爬虫版本列表
http://127.0.0.1:6800/listversions.json?project=myproject
-
获取爬虫运行状态
http://127.0.0.1:6800/listjobs.json?project=myproject
-
启动服务器上某一爬虫(必须是已发布到服务器的爬虫)
http://127.0.0.1:6800/schedule.json
(post方式,data={"project":myproject,"spider":myspider})
-
删除某一版本爬虫
http://127.0.0.1:6800/delversion.json
(post方式,data={"project":myproject,"version":myversion})
- 删除某一工程,包括该工程下的各版本爬虫
http://127.0.0.1:6800/delproject.json(post方式,data={"project":myproject})
这些接口已经告诉我们了。我们其实不需要用curl去控制
curl也是命令行工具。
我们可以使用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)
这样就可以部署到flask 或者fastapi上把接口抛出去,事先爬虫的部署。
实在是不推荐gerapy 或者是其他的一些可视化界面。说实话可以做个临时过渡来用。但具体的一些需求就无法实现了。