(В тот момент, когда написан этот ответ, последняя версия scrapy
равна 1.0.3
. Этот ответ будет работать для всех последних версий scrapy
)
Поскольку OffsiteMiddleware
читает содержимое в allowed_domains
только при инициализации предварительно скомпилированного объекта регулярного выражения при обработке сигнала spider_opened
, значения в allowed_domains
никогда не будут доступны позже.
Таким образом, простое обновление содержимого allowed_domains
не решит проблему.
В основном требуется два шага:
- Обновите содержимое
allowed_domains
в соответствии с вашими потребностями.
- Обновите кэш регулярных выражений в
OffsiteMiddleware
.
Вот код, который я использую для шага # 2:
# Refresh the regex cache for `allowed_domains`
for mw in self.crawler.engine.scraper.spidermw.middlewares:
if isinstance(mw, scrapy.spidermiddlewares.offsite.OffsiteMiddleware):
mw.spider_opened(self)
Предполагается, что приведенный выше код вызывается внутри ответного обратного вызова, поэтому self
здесь должен быть экземпляром класса паука.
Смотри также: