Вы можете настроить Scrapy на использование собственного средства форматирования журнала , что расширит стандартное средство форматирования и для форматирования полезной нагрузки перед ее сбросом в журнал.
В качестве примера давайте рассмотрим пример проекта quotesbot , упомянутого в scrapy docs .
Scrapy docs говорят есть настройка, которую мы можем использовать:
LOG_FORMATTER
По умолчанию: scrapy.logformatter.LogFormatter
класс для форматирования сообщений журнала для различных действий.
Итак, в файле settings.py
вы добавляете строку, которая сообщит Scrapy, какой форматер журнала следует использовать.
BOT_NAME = 'quotesbot'
SPIDER_MODULES = ['quotesbot.spiders']
NEWSPIDER_MODULE = 'quotesbot.spiders'
...
...
...
LOG_FORMATTER = 'quotesbot.my_pretty_formatter.MyPrettyFormatter' # Add this line.
Затем создайте новый "симпатичный форматер" в ./quotesbot/my_pretty_formatter.py
:
from pprint import pformat
from scrapy.logformatter import LogFormatter
class MyPrettyFormatter(LogFormatter):
def scraped(self, item, response, spider):
pretty_item = pformat(item) # This will prettify the item that's about to be logged.
return super().scraped(pretty_item, response, spider)
И все.
Вывод стандартного log formatter :
2020-02-26 19:57:06 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/10/>
{'text': '“... a mind needs books as a sword needs a whetstone, if it is to keep its edge.”', 'author': 'George R.R. Martin', 'tags': ['books', 'mind']}
Вывод нашего нового pretty formatter :
2020-02-26 19:55:43 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/10/>
{'author': 'George R.R. Martin',
'tags': ['books', 'mind'],
'text': '“... a mind needs books as a sword needs a whetstone, if it is to '
'keep its edge.”'}