当前位置: 首页 > 面试题库 >

使用scrapyd一次运行多个scrapy蜘蛛

邵阳
2023-03-14
问题内容

我在一个要刮擦多个站点(可能是数百个站点)的项目中使用了scrapy,并且我必须为每个站点编写特定的蜘蛛。我可以使用以下命令在部署要抓取的项目中安排
一只 蜘蛛:

curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2

但是,如何一次计划一个项目中的 所有 蜘蛛呢?

所有帮助非常感谢!


问题答案:

我一次运行200个以上Spider的解决方案是为该项目创建一个自定义命令。有关实现自定义命令的更多信息,请参见http://doc.scrapy.org/en/latest/topics/commands.html#custom-
project-commands

YOURPROJECTNAME / 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


 类似资料:
  • 问题内容: 我需要创建一个用户可配置的网络爬虫/爬虫,并且我正在考虑使用Scrapy。但是,我无法对域和允许的URL regex:es进行硬编码- 而是可以在GUI中对其进行配置。 如何(尽可能简单)使用Scrapy创建一个蜘蛛或一组蜘蛛,其中域和允许的URL regex:es是可动态配置的?例如,我将配置写入文件,然后蜘蛛程序以某种方式读取它。 问题答案: 警告:此答案适用于Scrapy v0.

  • 问题内容: 有没有一种方法可以在不使用Scrapy守护程序的情况下运行Scrapy项目中的所有蜘蛛程序?曾经有一种使用来运行多个Spider的方法,但是该语法已删除,Scrapy的代码也进行了很多更改。 我尝试创建自己的命令: 但是,一旦在上注册了蜘蛛,我就会得到所有其他蜘蛛的断言错误: 有什么办法吗?我不想开始子类化核心Scrapy组件,而只是为了运行所有我的蜘蛛。 问题答案: 这是一个不在自定

  • 问题内容: 有没有一种方法可以在Spider类终止之前触发它? 我可以自己终止蜘蛛,如下所示: 但是我找不到任何有关如何确定蜘蛛何时自然退出的信息。 问题答案: 看来您可以通过来注册信号监听器。 我会尝试类似的东西: 在较新版本的scrapy中已弃用。相反,您可以使用from 。

  • 我对这只蜘蛛的逻辑有个疑问。我想爬网的Castbox网站有无限分页类别之一。因此,我认为我可以拆分JSON文件的URL,然后切片,最后重新连接URL以便能够解析它。因此,我使用while循环来确定爬行器继续爬行所需元素的条件。 让我解释清楚。 当我检查Castbox网站的JSON URL时,我发现每次通过向下滚动页面重新加载时,只有一部分URL会发生变化。这部分被称为“跳过”,它在0到200之间变

  • 这段代码每次执行一个运行任务 如何一次从一个jar文件运行多个主类(并行)

  • 问题内容: 我有这个,在设定的总数时我得到一个错误。为什么我不能多次访问CTE? 问题答案: A基本上是一次性视图。它只保留一个语句,然后自动消失。 您的选择包括: 重新定义第二次。从定义的末尾到您的之前,这就像复制粘贴一样简单。 将结果放入表格或变量中 将结果具体化为真实表并引用 稍微更改一下即可,只需从您的CTE: 。