2015-10-04 77 views
0

我想使用Scrapy的內置URI參數來命名我的日誌文件(因爲我可以命名提要導出),但這不起作用。有人可以解釋這個區別嗎?Scrapy - 使用URI參數記錄文件

這可以通過啓動一個新項目,創建一個通用蜘蛛,使用下面的參數更新設置文件以及運行蜘蛛來進行復制。

scrapy startproject project_name 
cd project_name 
scrapy genspider project_spider 
# add above settings to settings.py 
scrapy crawl project_spider 
#outputs items file with correct name but log file has incorrect name 

我的設置文件包含以下內容:

FEED_URI = '%(name)s--%(time)s.csv' 
LOG_FILE = '%(name)s--%(time)s.log' 
+0

你能解釋一些嗎? – eLRuLL

+0

嗨,增加了一些更多的細節。謝謝 –

回答

0

,如果你有單獨的項目(BOT_NAME)每個蜘蛛然後在下面都可以使用(一般在這種情況下,蜘蛛的名字是一樣的BOT_NAME)您可以根據需要設置時間格式。

import time 

BOT_NAME = "test" 
FEED_URI = '%(name)s--%(time)s.csv' 
LOG_FILE = "%s--%s.log" % (BOT_NAME, time.strftime('%Y-%m-%dT%H-%M-%S')) 

但是,如果你有在單項目(BOT_NAME)多的蜘蛛,那麼你可能需要使用的日誌記錄,並在每個蜘蛛級別定義LOG_FILE(在__init __)下面給出,應該一例根據需要使用spider_name生成日誌。

from scrapy.contrib.spiders import CSVFeedSpider 
from scrapy import log 
import time 

class TestSpider(CSVFeedSpider): 
    name = 'test' 
    allowed_domains = ['testwebsite.com'] 
    start_urls = ['http://www.testwebsite.com'] 

    # check below how logging is set 
    def __init__(self, name=None, **kwargs): 
    LOG_FILE = "%s--%s.log" % (self.name, time.strftime('%Y-%m-%dT%H-%M-%S')) 
    log.log.defaultObserver = log.log.DefaultObserver() 
    log.log.defaultObserver.start() 
    log.started = False 
    log.start(LOG_FILE) 
    super(TestSpider, self).__init__(name, **kwargs) 

    # headers = ['id', 'name', 'description', 'image_link'] 
    # delimiter = '\t' 

    def parse_row(self, response, row): 
    ...