2015-10-04 2 views
0

Я хотел бы использовать встроенные параметры URI Scrapy, чтобы назвать мой файл журнала (как я могу назвать экспорт фида), но это не сработает. Может ли кто-нибудь объяснить разницу?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): 
    ...