Найти - Пользователи
Полная версия: grab.spider и большие видео-файлы.
Начало » Network » grab.spider и большие видео-файлы.
1 2
plusplus
Захотел написать простой парсер видео, но столкнулся с проблемой. Первым делом то я скачиваю видео в память получается, а уже потом только пишу его на диск. А если видео 1гб, да всё это в не сколько потоков, то всё наверное вообще встанет. Подскажите как-нибудь по простому средствами grab это можно обойти?
odnochlen
Средствами grab, может быть, и никак. Writer function или имя файла туда вроде как не передать. Автор когда-то что-то говорил про “использовать для этого предназначенные средства”, т.е. похоже, такой функционал он не встроил, хотя pycurl сам по себе это умеет.
plusplus
odnochlen
хотя pycurl сам по себе это умеет.
Наши в общих словах как это делается, если не сложно. Там можно поставить опцию сразу в файл писать? Или как-то по-другому это делается?
lorien
Прочитал ваш вопрос и в поры вдохновения сотворил такой код: https://bitbucket.org/lorien/grab/changeset/21e7fc3262f9e1581ad3c527c60cb2e01750fbb9
Использовать так: https://bitbucket.org/lorien/grab/src/21e7fc3262f9e1581ad3c527c60cb2e01750fbb9/test10.py?at=default

Пробуйте. В Spider тоже должно работать теоритически (не тестировал).
lorien
Суть функциональности, при ключенной опции body_inmemory=False, содержимое сетевых ответов сохраняется в файл, путь к файлу доступен через опцию g.response.body_path - т.е. делайте с ним, что хотите.
Внимание: g.response.body (это теперь property) в случае сохранения ответа в файл не должен использоваться, при первом же обращении к нему, содержимое файла прочитается в память.
odnochlen
А как-то сделать, чтобы слишком большие файлы не грузились в память или не качались, можно?

Можно задать имя файла? Юникод поддерживается?
plusplus
odnochlen
А как-то сделать, чтобы слишком большие файлы не грузились в память или не качались, можно?

Я так понимаю, пока можно предварительно посылать head-запрос и в зависимости от этого выбирать уже качать или нет.
odnochlen
Ну хед какбы может изменить состояние, да и файл может отдаваться только черер post. Лучше были бы, скажем, настройки размера или коллбек после получения заголовков.
lorien
> А как-то сделать, чтобы слишком большие файлы не грузились в память или не качались, можно?

Да, есть опция body_maxsize - по достижении заданного количества полученных байт соединение прерывается.

> Я так понимаю, пока можно предварительно посылать head-запрос и в зависимости от этого выбирать уже качать или нет.
Да, можно head. А можно любой тип запроса с опцией nobody=True.
odnochlen
А оно прерывается по скачиванию или по заголовку?

Лучше бы была возможность получать евент полученя заголовков и разрывать соединение.

Есть возможность сохранять дату с сервера?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB