Python Scrapy-使用URI参数记录文件
我想使用Scrapy的内置URI参数来命名日志文件(因为我可以命名提要导出),但这不起作用。有人能解释一下区别吗 这可以通过启动新项目、创建通用spider、使用以下参数更新设置文件以及运行spider来复制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 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):
...
你能再解释一下吗?嗨,补充了一些细节。谢谢