Python Scrapy-使用URI参数记录文件

Python Scrapy-使用URI参数记录文件,python,scrapy,Python,Scrapy,我想使用Scrapy的内置URI参数来命名日志文件(因为我可以命名提要导出),但这不起作用。有人能解释一下区别吗 这可以通过启动新项目、创建通用spider、使用以下参数更新设置文件以及运行spider来复制 scrapy startproject project_name cd project_name scrapy genspider project_spider # add above settings to settings.py scrapy crawl project_spider

我想使用Scrapy的内置URI参数来命名日志文件(因为我可以命名提要导出),但这不起作用。有人能解释一下区别吗

这可以通过启动新项目、创建通用spider、使用以下参数更新设置文件以及运行spider来复制

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'

如果每个爬行器都有单独的项目(BOT_名称),则可以使用下面的项目(一般情况下,爬行器名称与BOT_名称相同),您可以根据需要设置时间格式

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'))
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):
    ...
但是,如果您在单个项目(BOT_NAME)中有多个spider,那么您可能必须使用日志记录并在每个spider级别(在_init__中)定义日志文件,下面给出了一个示例,它应该根据您的需要生成带有spider_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'))
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):
    ...

你能再解释一下吗?嗨,补充了一些细节。谢谢