Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2012 15:12:46

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

Захотел написать простой парсер видео, но столкнулся с проблемой. Первым делом то я скачиваю видео в память получается, а уже потом только пишу его на диск. А если видео 1гб, да всё это в не сколько потоков, то всё наверное вообще встанет. Подскажите как-нибудь по простому средствами grab это можно обойти?



Офлайн

#2 Ноя. 8, 2012 15:29:24

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

Средствами grab, может быть, и никак. Writer function или имя файла туда вроде как не передать. Автор когда-то что-то говорил про “использовать для этого предназначенные средства”, т.е. похоже, такой функционал он не встроил, хотя pycurl сам по себе это умеет.

Офлайн

#3 Ноя. 8, 2012 18:51:13

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

odnochlen
хотя pycurl сам по себе это умеет.
Наши в общих словах как это делается, если не сложно. Там можно поставить опцию сразу в файл писать? Или как-то по-другому это делается?



Офлайн

#4 Ноя. 8, 2012 19:44:09

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

grab.spider и большие видео-файлы.

Прочитал ваш вопрос и в поры вдохновения сотворил такой код: https://bitbucket.org/lorien/grab/changeset/21e7fc3262f9e1581ad3c527c60cb2e01750fbb9
Использовать так: https://bitbucket.org/lorien/grab/src/21e7fc3262f9e1581ad3c527c60cb2e01750fbb9/test10.py?at=default

Пробуйте. В Spider тоже должно работать теоритически (не тестировал).

Офлайн

#5 Ноя. 8, 2012 19:46:13

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

grab.spider и большие видео-файлы.

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

Офлайн

#6 Ноя. 8, 2012 22:29:33

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

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

Можно задать имя файла? Юникод поддерживается?

Отредактировано odnochlen (Ноя. 8, 2012 22:30:39)

Офлайн

#7 Ноя. 9, 2012 09:42:22

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

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

Я так понимаю, пока можно предварительно посылать head-запрос и в зависимости от этого выбирать уже качать или нет.



Офлайн

#8 Ноя. 9, 2012 11:55:02

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

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

Офлайн

#9 Ноя. 9, 2012 17:54:53

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

grab.spider и большие видео-файлы.

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

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

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

Офлайн

#10 Ноя. 10, 2012 16:06:47

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

grab.spider и большие видео-файлы.

А оно прерывается по скачиванию или по заголовку?

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

Есть возможность сохранять дату с сервера?

Отредактировано odnochlen (Ноя. 10, 2012 16:07:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version