Передача элементов (или других переменных) в промежуточное программное обеспечение (или другие модули) scrapy. - PullRequest
0 голосов
/ 29 августа 2018

Я улучшаю паука, которого я написал несколько месяцев назад. Я пытаюсь сделать это умнее и загружать только новую информацию с сайта. Для этого я добавляю код в модуль загрузки промежуточного программного обеспечения, чтобы проверить, посещен ли уже URL-идентификатор или нет. Кроме URL-адреса, который я могу получить довольно легко с помощью команды request.url, мне нужно передать Элемент от Паука - этим Элементом является Дата последнего обновления.

Идея состоит в том, чтобы сравнить оба значения (URL-адрес и дату последнего обновления) со значениями из базы данных (обычный файл csv) и, если они одинаковы, отбросить запрос, если оба отсутствуют или если дата последнего обновления не ' не соответствует, чтобы продолжить запрос.

Проблема в том, что я не знаю, как передать Предмет от Паука в Промежуточное ПО. Я вижу, что в модуле Pipelines (объект) передается в класс, пытался добавить его в класс Middleware, но он не работает.

Есть идеи, как передать Предмет или любую другую переменную из Spider в модуль Middleware?

1 Ответ

0 голосов
/ 29 августа 2018

Обычно вы передаете любую дополнительную информацию в мета-запросе как request.meta['my_thing'] = ... или как аргумент yield Request(url, meta={'my_thing': ...}), к которому все промежуточные программы в цепочке смогут получить доступ. Однако для вашего случая я бы порекомендовал либо использовать встроенное промежуточное ПО кэш-памяти в фиктивной политике, либо один из этих двух модулей, которые выполняют именно то, что вы имеете в виду:
https://github.com/TeamHG-Memex/scrapy-crawl-once
https://github.com/scrapy-plugins/scrapy-deltafetch

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