我在一个项目中使用 scrapy 来抓取多个站点(可能是数百个),并且我必须为每个站点编写一个特定的蜘蛛。我可以使用以下命令在部署到 scrapyd 的项目中安排一个蜘蛛:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但是如何一次安排项目中的所有蜘蛛?
非常感谢所有帮助!
最佳答案
我一次运行 200 多个蜘蛛的解决方案是为项目创建一个自定义命令。有关实现自定义命令的更多信息,请参阅 http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands。
你的项目名称/命令/allcrawl.py :
from scrapy.command import ScrapyCommand
import urllib
import urllib2
from scrapy import log
class AllCrawlCommand(ScrapyCommand):
requires_project = True
default_settings = {'LOG_ENABLED': False}
def short_desc(self):
return "Schedule a run for all available spiders"
def run(self, args, opts):
url = 'http://localhost:6800/schedule.json'
for s in self.crawler.spiders.list():
values = {'project' : 'YOUR_PROJECT_NAME', 'spider' : s}
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
log.msg(response)
确保在 settings.py 中包含以下内容
COMMANDS_MODULE = 'YOURPROJECTNAME.commands'
然后从命令行(在您的项目目录中)您可以简单地输入
scrapy allcrawl
关于python - 使用scrapyd一次运行多个scrapy蜘蛛,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10801093/