高级自定义¶因为scrapy使用stdlib日志记录模块,所以可以使用stdlib日志记录的所有功能自定义日志记录。 例如,假设您正在抓取一个返回许多HTTP 404和500响应的网站,并且您希望隐藏像这样的所有消息: 2016-12-16 22:00:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring
response <500 http://quotes.toscrape.com/page/1-34/>: HTTP status code
is not handled or not allowed
首先要注意的是一个记录器名称-它在括号中: 接下来,我们可以看到消息具有信息级别。为了隐藏它,我们应该为 import logging
import scrapy
class MySpider(scrapy.Spider):
# ...
def __init__(self, *args, **kwargs):
logger = logging.getLogger('scrapy.spidermiddlewares.httperror')
logger.setLevel(logging.WARNING)
super().__init__(*args, **kwargs)
如果您再次运行此蜘蛛,则从 您也可以通过以下方式来过滤日志记录 import logging
import re
class ContentFilter(logging.Filter):
def filter(self, record):
match = re.search(r'\d{3} [Ee]rror, retrying', record.message)
if match:
return False
项目级别的过滤可以附加到由Scrapy创建的根处理程序,这是对项目不同部分(中间件、蜘蛛等)的所有记录器进行过滤的一种便捷方式:: import logging
import scrapy
class MySpider(scrapy.Spider):
# ...
def __init__(self, *args, **kwargs):
for handler in logging.root.handlers:
handler.addFilter(ContentFilter())
或者,您也可以选择特定的记录器并将其隐藏,而不会影响其他记录器: import logging
import scrapy
class MySpider(scrapy.Spider):
# ...
def __init__(self, *args, **kwargs):
logger = logging.getLogger('my_logger')
logger.addFilter(ContentFilter()) |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2025-1-3 03:03 , Processed in 0.017122 second(s), 17 queries .