更新由scrapyd控制的spider代码

更新由scrapyd控制的spider代码,scrapy,scrapyd,Scrapy,Scrapyd,安装/激活由scrapyd控制的卡盘的正确方法是什么 我使用scrapyddeploy安装了一个新的spider版本;作业当前正在运行。我是否必须使用cancel.json停止作业,然后安排新作业?回答我自己的问题: 我编写了一个小python脚本,可以停止所有运行的爬行器。运行此脚本后,我运行scrapyd deploy,然后重新启动爬行器。 不过,我仍然不确定这是否是刮毛专业人士的做法,但我觉得这是明智的 这是脚本(替换项目的值以适合您的脚本),它需要请求包(pip安装请求): import

安装/激活由scrapyd控制的卡盘的正确方法是什么


我使用scrapyddeploy安装了一个新的spider版本;作业当前正在运行。我是否必须使用
cancel.json停止作业,然后安排新作业?

回答我自己的问题:

我编写了一个小python脚本,可以停止所有运行的爬行器。运行此脚本后,我运行
scrapyd deploy
,然后重新启动爬行器。 不过,我仍然不确定这是否是刮毛专业人士的做法,但我觉得这是明智的

这是脚本(替换
项目
的值以适合您的脚本),它需要
请求
包(
pip安装请求
):

import requests
import sys
import time


PROJECT = 'crawler'  # replace with your project's name

resp = requests.get("http://localhost:6800/listjobs.json?project=%s" % PROJECT)
list_json = resp.json()
failed = False

count = len(list_json["running"])
if count == 0:
    print "No running spiders found."
    sys.exit(0)

for sp in list_json["running"]:
    # cancel this spider
    r = requests.post("http://localhost:6800/cancel.json", data={"project":PROJECT, "job": sp["id"]})
    print "Sent cancel request for %s %s" % (sp["spider"], sp["id"])
    print "Status: %s" % r.json()
    if r.json()["status"] != "ok":
        print "ERROR: Failed to stop spider %s" % sp["spider"]
        failed = True

if failed:
    sys.exit(1)

# poll running spiders and wait until all spiders are down
while count:
    time.sleep(2)
    resp = requests.get("http://localhost:6800/listjobs.json?project=%s" % PROJECT)
    count = len(resp.json()["running"])
    print "%d spiders still running" % count