Scrapy FilesPipeline избегает повторной загрузки файлов (Google Cloud Storage) при разных запусках сканирования - PullRequest
2 голосов
/ 19 февраля 2020

Я знаю, что здесь уже есть вопрос по этому поводу ( Как избежать повторной загрузки медиафайлов на S3 в Scrapy? ), но у меня пока нет ответа

Я разработал паук с FilesPipeline, чтобы получить PDF-файлы с нескольких веб-сайтов.

Я понимаю, что класс FilesPipeline использует GCSFilesStore и функцию media_to_download для сравнения даты атрибута BLOB-объекта last_modified с текущим временем относительно продолжительности срока действия в днях (EXPIRES изначально равен 90) Суть в том, что я хочу иметь возможность запускать мой паук время от времени и загружать только новые документы

Однако, когда я запускаю свой паук во второй раз, это действительно - снова загрузите все файлы

Я попытался увеличить параметр EXPIRES, но, похоже, его не обрезал.

Спасибо за помощь, спасибо!

ОБНОВЛЕНИЕ:

Я думаю, что это ошибка от scrap. Я подал сообщение об ошибке на github , где я объясняю, как воспроизвести это

1 Ответ

0 голосов
/ 07 мая 2020

Похоже, это может быть связано с некоторыми настройками разрешений для корзины. Вот ответ пользователя github @ michalp123:

Цитата Я не могу воспроизвести эту ошибку. @lblanche, вы уверены, что правильно настроили разрешения для корзины? В самый первый раз, когда я попытался воспроизвести его, я получил настройку, в которой у служебной учетной записи, которую я использовал, были разрешения на запись, но по какой-то причине вызов get_blob в корзине вызвал 403, что вызвало сбой метода stat_file в GCSFilesStore, и это вызвало файл для загрузки каждый раз. После исправления разрешений все заработало как надо. Если это так, я думаю, что было бы неплохо проверить разрешения в init в GCSFilesStore и вывести предупреждение, если невозможно получить метаданные файла из корзины.

Тот же пользователь объединил исправление, которое добавляет предупреждение на GCSFilesStore init, если доступ к метаданным не разрешен.

...