2016-04-24 39 views
1

問題禁用Scrapyd項目.jl飼料

我想知道如何禁用物品存儲scrapyd的存儲。

我試過

我部署一個蜘蛛到Scrapy守護Scrapyd。部署的蜘蛛將蜘蛛數據存儲在數據庫中。它工作正常。

但是Scrapyd記錄每個Scrapy項目。你可以在檢查報告web interface時看到。 這個項目的數據存儲在..../items/<project name>/<spider name>/<job name>.jl

我不知道如何禁用這個。我在一個Docker容器中運行了scrapyd,它使用太多的存儲空間。

我試過suppress Scrapy Item printed in logs after pipeline,但這對於scrayd日誌來說似乎沒有任何作用。所有蜘蛛日誌記錄設置似乎都被scrapyd忽略。

編輯 我在關於Item storing的文檔中找到了該條目。看起來,如果您省略了items_dir設置,則不會發生項目日誌記錄。據說這是默認禁用的。我沒有scrapyd.conf文件,因此應禁用項目日誌記錄。不是這樣。

回答

1

寫完我的回答後,我重新閱讀你的問題,我發現你想要什麼與記錄沒有任何關係,但它是關於不寫入(默認ish).jl提要(也許更新標題爲:「禁用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級別打印,則可能意味着您的代碼或某個管道正在打印它。您可以進一步提高日誌級別和/或調查並找到打印並刪除它的代碼。

+0

我希望你的建議有效。但事實並非如此。我試過LOG_LEVEL = WARN。它沒有任何區別。這是如何設置另一個設置比設置文件中的日誌級別? – Pullie

+0

太奇怪了,它不起作用。我現在會試試:) – neverlastn

+1

順便使用docker做得很好。我不清楚你如何使用抓取的數據,但是一般來說,在抓取完成後批量上傳「Item」,而不是在某些物品管道中抓取時執行此操作。這是'.jl'文件背後的概念。你會鉤住'spider_closed'信號並使用批量工具上傳這個'.jl'文件。但也有一些罕見的情況,例如您希望最小延遲的情況,建議/不可能這樣做。 – neverlastn