Избегайте повторного сканирования URL-адресов

Я закодировал простой искатель. В файле settings.py, ссылаясь на документацию по scrapy, я использовал

DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'

Если я закрою искатель и снова запустил поисковый робот, он снова очистит повторяющиеся URL. Я что-то делаю неправильно?

Ответ 1

Я считаю, что вы ищете "поддержку настойчивости", чтобы приостановить и возобновить обход.

Чтобы включить его, вы можете:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

Подробнее об этом можно узнать здесь.

Ответ 2

В соответствии с документация, DUPEFILTER_CLASS уже установлен на scrapy.dupefilter.RFPDupeFilter по умолчанию.

RFPDupeFilter не помогает, если вы останавливаете искатель - он работает только при реальном обходе, помогает избежать очищения повторяющихся URL-адресов.

Похоже, вам нужно создать свой собственный настраиваемый фильтр на основе RFPDupeFilter, как это было сделано здесь: как фильтровать повторяющиеся запросы на основе url в scrapy. Если вы хотите, чтобы ваш фильтр работал между сеансами обхода scrapy, вы должны хранить список обходных URL-адресов в базе данных или csv файле.

Надеюсь, что это поможет.

Ответ 3

вы можете переписать Планировщик с помощью Redis, например scrapy-redis, тогда вы можете избежать повторного сканирования URL-адресов при повторном запуске своего проекта.