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

Disable Scrapyd item storing in .jl feed

问题

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

我试过的

我将蜘蛛部署到 Scrapy 守护进程 Scrapyd。部署的爬虫将爬取的数据存储在数据库中。而且效果很好。

然而,Scrapyd 记录了每个被抓取的 Scrapy 项目。你可以在检查 scrapyd web interface 时看到这一点。 此项目数据存储在 ..../items/<project name>/<spider name>/<job name>.jl

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

我已经尝试过 suppress Scrapy Item printed in logs after pipeline,但这似乎对 scrapyd 日志记录没有任何作用。 scrapyd 似乎忽略了所有蜘蛛记录设置。

编辑 我在关于 Item storing 的文档中找到了这个条目。似乎如果您省略 items_dir 设置,项目记录将不会发生。据说这是默认禁用的。我没有 scrapyd.conf 文件,所以项目记录应该被禁用。不是。

写完我的回答后,我 re-read 你的问题,我看到你想要的与日志记录无关,而是关于不写入 (default-ish) .jl 提要(也许将标题更新为:"Disable scrapyd Item storing")。要覆盖 scrapyd 的默认值,只需将 FEED_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/spiders/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

注意运行ning:

之间的区别
$ scrapy crawl example
# or
$ scrapy crawl example -L DEBUG
# or
$ scrapy crawl example -s LOG_LEVEL=DEBUG

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

通过在你的蜘蛛上尝试这样的组合,确认它不会在调试之外打印 log-level 的项目信息。

现在是时候了,在部署到 scrapyd 之后执行完全相同的操作:

$ curl http://localhost:6800/schedule.json -d setting=LOG_LEVEL=INFO -d project=tutorial -d spider=example

当您 运行:

时确认日志不包含项目

请注意,如果您的项目仍以 INFO 级别打印,则可能意味着您的代码或某些管道正在打印它。您可以 log-level 进一步 and/or 调查并找到打印它的代码并将其删除。