Ловля предупреждений Scrapy и помещая их в предметы - PullRequest
0 голосов
/ 09 января 2019

Я получаю следующее предупреждение во время очистки:

2019-01-04 05:54:43 [scrapy.core.downloader.tls] WARNING: Remote certificate is not valid for hostname ...

Я хотел бы сохранить его в поле моего товара, но не знаю, как его отловить для конкретного запроса. Мне удалось разобраться с ошибками через errback в scrapy.Request следующим образом:

def errback(self, failure):

     item = BaseItem()

     item['error'] = failure.type.__name__
     item['url'] = failure.request.url

     yield item

Есть идеи, как ловить предупреждения и добавлять их в item['warning']?

1 Ответ

0 голосов
/ 10 января 2019

Вы не можете.
Scrapy не отслеживает ведение журнала, поэтому, если компонент не обновляет мета (иногда это делает) некоторыми деталями, вам придется обновлять каждый компонент тем, что вы хотите сделать.

Вы можете обновить местоположение, где появляется предупреждение (scrapy.core.downloader.tls), и сделать так, чтобы оно обновляло response.meta некоторыми ключевыми словами, но это, кажется, очень сложно сделать.

Лучше всего было бы открыть вопрос о github-части scrapy - это может быть полезно для будущих версий scrapy.

1010 * В качестве альтернативы * В качестве хака вы можете прочитать лог-файл для доменного имени и, если он содержит его, пометить очищенный элемент: def parse(self, response): domain = 'foo.com' item = {'bad_cert': False} with open('log.out') as f: for line in f: if 'Remote certificate' in line and domain in line: item['bad_cert'] = True Хотя я не уверен, насколько это надежно. На бумаге сообщение журнала всегда должно быть написано перед функцией анализа, но регистрация не предназначена для чтения во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...