3. scrapy >=1.0 为每个 spider 设置单独的 pipeline
Class Spider1(CrawlSpider):
name = 'spider1'
custom_settings = {
'ITEM_PIPELINES': {
'sporttery.pipelines.xxxPipeline': 300,
'sporttery.pipelines.mmmPipeline': 301
},
}
Class Spider2(CrawlSpider):
name = 'spider2'
custom_settings = {
'ITEM_PIPELINES': {
'sporttery.pipelines.xxxPipeline': 300
},
}
原文:https://blog.youkuaiyun.com/haipengdai/article/details/48543313
2019年1月15日
2. 每一个spider分别记录日志(排除系统日志):
这两天鼓捣scrapy的日志,百度的大部分是在setting.py 设置 日志等级LOG_LEVEL 以及 日志文件路径LOG_FILE。
或者是在spider里面引入 logging 然后通过logging.basicConfig 进行相关配置。
上面的这种设置,是能够成功的写入日志文件。
但是,写入的日志不仅仅有自己想记录的信息,还有系统自己输出的日志,以及spider抓取的数据都会写入日志。
这并不是我想要的实现方式,我只想日志里记录的只有我在位置调试的信息。所以,需要去看文档了。
文档上说 scrapy采用的是python 内置的 logging模块
那么,一些都好解决了, 在每个spider里面分别创建日志对象,我用的是 TimedRotatingFileHandler
下面是代码,对python的理解有限,写的有问题,希望留言告知。
这个是工具模块:
import logging.handlers
def getLoger(name):
logger = logging.getLogger(str(name))
logger.setLevel(level=logging.WARNING)
handler = logging.handlers.TimedRotatingFileHandler('./log/' + str(name), 'S', backupCount=3, encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
这里面根据秒来切割日志,保存三个备份,日志文件路径需要看运行爬虫的方式了,我是用的scrapy爬虫测试通用的模块,所以日志路径是在项目根目录下。
这个是测试的爬虫:
# -*- coding: utf-8 -*-
import scrapy
from tools import getLoger
class TestuaSpider(scrapy.Spider):
name = 'testua'
allowed_domains = ['httpbin.org']
start_urls = ['http://httpbin.org/get']
def __init__(self):
self.mylog = getLoger(self.name + '.log')
def parse(self, response):
pass
self.mylog.warning('pendant test')
print(response.text)
爬虫内引入创建日志对象的函数,初始化爬虫的时候 给当前爬虫设置一个对象属性 mylog 然后就可以记录日志了。
放在根目录的调试脚本:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 调试脚本
from scrapy.cmdline import execute
import os
import sys
#添加当前项目的绝对地址
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(['scrapy', 'crawl', 'testua']) # testua 是爬虫名字
2018年12月1日
1. spider获取pipeline对象: 传送门-点击跳转