2015-06-23 2 views
3

Нам нужно иметь возможность пересканировать исторические данные. Представьте себе сегодня, 23 июня. Мы просматриваем веб-сайт сегодня, но через несколько дней мы понимаем, что нам нужно пересканировать его, «увидев» его точно так же, как и 23-го. Это означает, что все возможные переадресации, запросы GET и POST и т. Д. ВСЕ страницы, которые видит паук, должны быть точно такими же, как на 23-м, несмотря ни на что.Постоянный кеш скрининга

Сценарий использования: при изменении веб-сайта, и наш паук не может что-то сканировать, мы хотим иметь возможность вернуться в прошлое и снова запустить паук после того, как мы его исправим.

Как правило, это должно быть довольно легко - подкласс кэш стандартного Scrapy, в силе его использовать даты для вложенных папок и иметь что-то вроде этого:

cache/spider_name/2015-06-23/HERE ARE THE CACHED DIRS

но когда я экспериментировал с этим, я понял, иногда паук сканирует сайт в прямом эфире. Это означает, что не хватает некоторых страниц из кеша (хотя соответствующие файлы существуют на диске), но вместо этого они берут их с живого веб-сайта. Это случилось со страницами с капчами, в частности, но, возможно, с некоторыми другими.

Как мы можем заставить Scrapy до всегда взять страницу из кеша, не попав на сайт в прямом эфире? В идеале, он должен работать даже без подключения к Интернету.

Update: мы использовали простейшую политику и HTTPCACHE_EXPIRATION_SECS = 0

Спасибо!

ответ

0

Чтобы сделать именно то, что вы хотите, вы должны были это в настройках:

HTTPCACHE_IGNORE_MISSING = True

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

Когда вы устанавливаете: HTTPCACHE_EXPIRATION_SECS = 0

Это только заверить вас, что «кэшированные запросы никогда не истечет», но если страница не находится в кэше, то она будет скачать.

Вы можете проверить documentation.

Смежные вопросы