问题
我想知道如何禁用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 文件,因此应禁用项目日志记录。事实并非如此。
答案 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
运行时确认日志中不包含项目:
请注意,如果您的项目仍以INFO级别打印,则可能意味着您的代码或某些管道正在打印它。您可以进一步提升日志级别和/或调查并找到打印它的代码并将其删除。