2016-07-11 5 views
0

Интересно, какие методы вы бы использовали, если на странице есть ссылки на 6 видеороликов, по 300 Мб каждый, и вы хотите загрузить их все. Должен ли я писать свой пользовательский загрузчик?Как скачать файлы с помощью scrapy?

Я привык использовать MediaPipeline, но он использует рамочный планировщик, который имеет следующие вопросы:

  1. Вы никогда не знаете, какой файл в настоящее время загружены
  2. Вы не имеете ни малейшего представления о загрузке прогрессе/состояние пока он не сработает.
  3. Поведение в режиме ожидания: a) Похоже, что тайм-аут применяется ко всей операции загрузки запросов, а не только к паузе при загрузке. Итак, скажем, имея тайм-аут 5 минут, я никогда не смогу загрузить файл, который занимает 6 минут для загрузки. б) Если вы сделаете 5 одновременных длинных запросов, и один из них займет слишком много времени, вы получите все из них (еще не завершенные). Вы должны ограничить количество одновременных запросов на 1 в настройках (что повлияет на весь паук).
+0

Зачем вам нужны отчеты о прогрессе/состоянии? Я уверен, что медиаконвейер регистрирует эти события, и если журналы не видны, возможно, ниже уровень регистратора до INFO (может быть установлен в WARNING). – Granitosaurus

+0

Потому что я повторяю ситуацию, когда половина файлов сбой (при наличии нескольких больших файлов в очереди) с timout/start retrying, и я даже не могу сказать, связано ли это с одним файлом или несколькими файлами или ошибкой в ​​рамках. И это был бы кошмар, если бы это произошло на сайте клиентов. В качестве обходного пути я установил CONCURRENT_REQUESTS_PER_DOMAIN = 1, и, похоже, это лекарство, по крайней мере один раз все закончилось отлично – VladimirLenin

+0

Я всегда использую уровень DEBUG, и он ничего не сообщает. Я добавляю свои собственные сообщения в конвейер, но когда я получаю 6 элементов, я вижу только, что все они начинаются сразу, а затем завершаются один за другим. Я даже не заказывал предмет/фактически запрашивал – VladimirLenin

ответ

0

Вы можете использовать Youtube downloader после получения ссылок на видео.

Загрузитель Youtube попытается продолжить, если видео не закончило загрузку. Вы также можете заставить его продолжить. Создайте обертку вокруг нее для параллелизма, если требуется длительная загрузка.

Отказ от ответственности: Я ни в коем случае не связан с сопровождающими этого пакета.

+0

Я использую его, но когда сложно извлечь URL-адрес со страницы. Сам Y-dl использует внешние загрузчики, уверены ли вы, что имеет смысл использовать его при наличии прямого видеоролика? – VladimirLenin

+0

Да, имеет смысл это сделать. –