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

时间:2016-04-24 15:12:24

标签: scrapy scrapyd

问题

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

我尝试了什么

我将蜘蛛部署到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 文件,因此应禁用项目日志记录。事实并非如此。

1 个答案:

答案 0 :(得分:1)

在写完答案之后,我重新阅读了你的问题,我发现你想要的东西与日志记录无关,但它不是写入(默认为什么).jl Feed(也许更新标题为:“禁用scrapyd项目存储”)。要覆盖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

注意运行:

之间的区别
$ 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

通过在您的蜘蛛上尝试这样的组合,确认它不会打印超出调试的日志级别的项目信息。

现在是时候了,在你部署到scrapyd之后完全一样:

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

运行时确认日志中不包含项目:

enter image description here

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