scrapyd的安装
.安装
pip3 install scrapyd
二.配置
安装完毕之后,需要新建一个配置文件/etc/scrapyd/scrapyd.conf,Scrapyd在运行的时候会读取此配置文件。
在Scrapyd 1.2版本之后,不会自动创建该文件,需要我们自行添加。
首先,执行如下命令新建文件:
mkdir /etc/scrapyd
vi /etc/scrapyd/scrapyd.conf
接着写入如下内容:
[scrapyd] eggs_dir = eggs logs_dir = logs items_dir = jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 10 finished_to_keep = 100 poll_interval = 5.0 bind_address = 0.0.0.0 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher webroot = scrapyd.website.Root [services] schedule.json = scrapyd.webservice.Schedule cancel.json = scrapyd.webservice.Cancel addversion.json = scrapyd.webservice.AddVersion listprojects.json = scrapyd.webservice.ListProjects listversions.json = scrapyd.webservice.ListVersions listspiders.json = scrapyd.webservice.ListSpiders delproject.json = scrapyd.webservice.DeleteProject delversion.json = scrapyd.webservice.DeleteVersion listjobs.json = scrapyd.webservice.ListJobs daemonstatus.json = scrapyd.webservice.DaemonStatus
中之一是max_proc_per_cpu
官方默认为4,即一台主机每个CPU最多运行4个Scrapy任务,在此提高为10。另外一个是bind_address
,默认为本地127.0.0.1,在此修改为0.0.0.0,以使外网可以访问。
三.后台运行
Scrapyd是一个纯Python项目,这里可以直接调用它来运行。为了使程序一直在后台运行,Linux和Mac可以使用如下命令:
(scrapyd > /dev/null &)
这样Scrapyd就会在后台持续运行了,控制台输出直接忽略。当然,如果想记录输出日志,可以修改输出目标,如
(scrapyd > ~/scrapyd.log &)
时会将Scrapyd的运行结果输出到~/scrapyd.log文件中。
当然也可以使用screen、tmux、supervisor等工具来实现进程守护。
运行之后,便可以在浏览器的6800端口访问Web UI了,从中可以看到当前Scrapyd的运行任务、日志等内容,如图所示。

就需要回退版本
Scrapy==1.6.0 Twisted==18.9.0
五.访问认证
配置完成后,Scrapyd和它的接口都是可以公开访问的。如果想配置访问认证的话,可以借助于Nginx做反向代理,这里需要先安装Nginx服务器。
yum install nginx
然后修改Nginx的配置文件nginx.conf,增加如下配置:
http { server { listen 6801; location / { proxy_pass http://127.0.0.1:6800/; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; } } }
这里使用的用户名和密码配置放置在/etc/nginx/conf.d目录下,我们需要使用htpasswd
命令创建。例如,创建一个用户名为admin的文件,命令如下:
htpasswd -c .htpasswd admin
接着就会提示我们输入密码,输入两次之后,就会生成密码文件。此时查看这个文件的内容:
cat .htpasswd
admin:5ZBxQr0rCqwbc
配置完成后,重启一下Nginx服务,运行如下命令:
nginx -s reload
这样就成功配置了Scrapyd的访问认证了。
六.接口
import requests import json baseUrl ='http://127.0.0.1:6800/' daemUrl ='http://127.0.0.1:6800/daemonstatus.json' listproUrl ='http://127.0.0.1:6800/listprojects.json' listspdUrl ='http://127.0.0.1:6800/listspiders.json?project=%s' listspdvUrl= 'http://127.0.0.1:6800/listversions.json?project=%s' listjobUrl ='http://127.0.0.1:6800/listjobs.json?project=%s' delspdvUrl= 'http://127.0.0.1:6800/delversion.json' #http://127.0.0.1:6800/daemonstatus.json #查看scrapyd服务器运行状态 r= requests.get(daemUrl) print '1.stats :\n %s \n\n' %r.text #http://127.0.0.1:6800/listprojects.json #获取scrapyd服务器上已经发布的工程列表 r= requests.get(listproUrl) print '1.1.listprojects : [%s]\n\n' %r.text if len(json.loads(r.text)["projects"])>0 : project = json.loads(r.text)["projects"][0] #http://127.0.0.1:6800/listspiders.json?project=myproject #获取scrapyd服务器上名为myproject的工程下的爬虫清单 listspd=listspd % project r= requests.get(listspdUrl) print '2.listspiders : [%s]\n\n' %r.text if json.loads(r.text).has_key("spiders")>0 : spider =json.loads(r.text)["spiders"][0] #http://127.0.0.1:6800/listversions.json?project=myproject ##获取scrapyd服务器上名为myproject的工程下的各爬虫的版本 listspdvUrl=listspdvUrl % project r = requests.get(listspdvUrl) print '3.listversions : [%s]\n\n' %rtext if len(json.loads(r.text)["versions"])>0 : version = json.loads(r.text)["versions"][0] #http://127.0.0.1:6800/listjobs.json?project=myproject #获取scrapyd服务器上的所有任务清单,包括已结束,正在运行的,准备启动的。 listjobUrl=listjobUrl % proName r=requests.get(listjobUrl) print '4.listjobs : [%s]\n\n' %r.text #schedule.json #http://127.0.0.1:6800/schedule.json -d project=myproject -d spider=myspider #启动scrapyd服务器上myproject工程下的myspider爬虫,使myspider立刻开始运行,注意必须以post方式 schUrl = baseurl + 'schedule.json' dictdata ={ "project":project,"spider":spider} r= reqeusts.post(schUrl, json= dictdata) print '5.1.delversion : [%s]\n\n' %r.text #http://127.0.0.1:6800/delversion.json -d project=myproject -d version=r99' #删除scrapyd服务器上myproject的工程下的版本名为version的爬虫,注意必须以post方式 delverUrl = baseurl + 'delversion.json' dictdata={"project":project ,"version": version } r= reqeusts.post(delverUrl, json= dictdata) print '6.1.delversion : [%s]\n\n' %r.text #http://127.0.0.1:6800/delproject.json -d project=myproject #删除scrapyd服务器上myproject工程,注意该命令会自动删除该工程下所有的spider,注意必须以post方式 delProUrl = baseurl + 'delproject.json' dictdata={"project":project } r= reqeusts.post(delverUrl, json= dictdata) print '6.2.delproject : [%s]\n\n' %r.text
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器