Scrapy 禁用存储在.jl提要中的项目

Scrapy 禁用存储在.jl提要中的项目,scrapy,scrapyd,Scrapy,Scrapyd,问题 我想知道如何禁用存储在scrapyd中的项目 我尝试的 我在Scrapy守护进程中部署了一个spider。部署的spider将spidered数据存储在数据库中。而且效果很好 但是,Scrapyd会记录每个刮下的刮痕。您可以在检查scrapyd时看到这一点。 此项目数据存储在…/items//.jl 我不知道如何禁用它。我在Docker容器中运行scrapyd,它占用了太多的存储空间 我已经试过了,但这似乎对我没有任何帮助。scrapyd似乎忽略了所有spider日志记录设置 编辑 我在关

问题

我想知道如何禁用存储在scrapyd中的项目

我尝试的

我在Scrapy守护进程中部署了一个spider。部署的spider将spidered数据存储在数据库中。而且效果很好

但是,Scrapyd会记录每个刮下的刮痕。您可以在检查scrapyd时看到这一点。 此项目数据存储在
…/items//.jl

我不知道如何禁用它。我在Docker容器中运行scrapyd,它占用了太多的存储空间

我已经试过了,但这似乎对我没有任何帮助。scrapyd似乎忽略了所有spider日志记录设置

编辑
我在关于的文档中找到了此条目。如果省略
items\u dir
设置,则不会记录项目。据说这是默认禁用的。我没有scrapyd.conf文件,因此应该禁用项目日志记录。不是。

在写下我的答案后,我重新阅读了您的问题,我发现您想要的与日志记录无关,而是不写入(默认ish)
.jl
提要(可能会将标题更新为:“禁用scrapyd项存储”)。要覆盖scrapyd的默认值,只需将
FEED\u URI
设置为空字符串,如下所示:

$ curl http://localhost:6800/schedule.json -d project=tutorial -d spider=example -d setting=FEED_URI=
对于其他正在查看日志的人。。。让我们看一个例子。我们照常做:

$ scrapy startproject tutorial
$ cd tutorial
$ scrapy genspider example example.com
然后编辑
tutorial/spider/example.py
以包含以下内容:

import scrapy

class TutorialItem(scrapy.Item):
    name = scrapy.Field()
    surname = scrapy.Field()

class ExampleSpider(scrapy.Spider):
    name = "example"

    start_urls = (
        'http://www.example.com/',
    )

    def parse(self, response):
        for i in xrange(100):
            t = TutorialItem()
            t['name'] = "foo"
            t['surname'] = "bar %d" % i
            yield t
请注意运行以下各项之间的区别:

$ scrapy crawl example
# or
$ scrapy crawl example -L DEBUG
# or
$ scrapy crawl example -s LOG_LEVEL=DEBUG

通过在spider上尝试这种组合,可以确认它不会打印调试之外的日志级别的项目信息

现在,在部署到scrapyd之后,您可以执行完全相同的操作:

$ curl http://localhost:6800/schedule.json -d setting=LOG_LEVEL=INFO -d project=tutorial -d spider=example
运行时,确认日志中不包含项目:


请注意,如果您的项目仍然以信息级别打印,则可能意味着您的代码或某些管道正在打印它。您可以进一步提高日志级别和/或调查并找到打印日志的代码并将其删除。

我希望您的建议能奏效。但事实并非如此。我尝试了LOG_LEVEL=WARN。这没什么区别。这个设置如何成为设置文件中日志级别之外的另一个设置?顺便说一句,使用docker做得很好。我不知道您是如何使用刮取的数据的,但一般来说,如果您在爬网完成后批量上传
项目,而不是在某个项目管道中爬网时进行,则开销会更低。这就是那些
.jl
文件背后的概念。您将挂接到
spider_closed
信号,并使用批量工具上载此
.jl
文件。但也有少数情况下不建议/不可能这样做,例如,如果您想要最小的延迟,在管道中,我直接保存到另一个Docker容器中运行的MySQL数据库。我覆盖了process\u item方法
def process\u item(self、productitem、spider):
回答得很好!您的回答解释了如何禁用项目存储和日志记录。你的解决方案有效。
$ curl http://localhost:6800/schedule.json -d setting=LOG_LEVEL=INFO -d project=tutorial -d spider=example