Как мне создать собственный ResponseType в Scrapy? - PullRequest
0 голосов
/ 25 сентября 2019

Я заинтересован в расширении Scrapy для своего проекта, добавив собственный тип ResponseType.Сейчас я хочу добавить тип PDF, который будет использовать PDFMiner для возврата простого текста и структуры документа (включая ссылки).Возможно, я захочу добавить другие типы документов позже.

Похоже, что сопоставление типов MIME с классами ответов происходит в scrapy.responsetypes - в частности, в словаре CLASSES в ResponseTypes,Однако не ясно, если / как это должно быть переопределено пользовательскими классами ответов.На переменную responsetypes в конце этого файла ссылаются непосредственно в нескольких других местах, и я не вижу никакой ссылки на этот класс в настройках проекта Scrapy.Кроме того, я не смог найти ничего о том, как это сделать, в документации по Scrapy.

Я мог бы, конечно, разветвить Scrapy и использовать свою собственную версию с определенными пользовательскими классами, но это привело бы к головной боли при обслуживании.

Какой лучший способ определения пользовательских типов ответов в Scrapy?

1 Ответ

0 голосов
/ 26 сентября 2019

Нет простого способа сделать это.Scrapy ожидает, что вы будете удовлетворены типами ответов по умолчанию.
Вы могли бы заменить обработчики загрузки и промежуточное ПО, которые используют этот класс, но это, вероятно, было бы слишком много работы ...

Самый простой способ получить аналогичный результат, вероятно, состоит в том, чтобы просто добавить дополнительное промежуточное ПО загрузчика, которое будет:

  • вызываться после всех других (соответствующих) промежуточных программ загрузчика
  • проверитьContent-Type заголовок ответа, созданного с помощью scrapy
  • , если необходимо, замените ответ своим собственным

Это действительно делает дополнительную работу (создает дополнительный объект ответа после обычной обработкисделано), но это гораздо проще реализовать, чем альтернатива.

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