@The_Immortal

Каким образом скачать файл с прединициализацией?

Выполняю парсинг сайта с предварительной авторизацией через библиотеку requests. Дошёл до момента скачивания файла по ссылке вида https://somesite.org/download.php?id=433
Проблема в том, что такая ссылка требует предварительной инициализации (как, кстати, такие ссылки называются по-английски?) - т.е. сначала обращаешься к ссылке, а далее выдается сам файл на скачивание.

Был тут, не помогло, ибо сюдаlocal_filenameпередается не само название файла, а кусок ссылки (в моем примере это "download.php?id=433").

Нашёл это, однако там предлагается использовать библиотеку urllib, но дело в том, что я работаю из-под requests и переделываться на urllib не хочу (да и requests как бы стандартом считается, что ли), а urllib, к сожалению, не знает ничего про сессию (куки), созданную библиотекой requests и, соответственно, ничего скачать вот таким образом:urllib.request.urlretrieve(url, path_to_file)не может, т.к. не имеет доступа к файлу.

Подскажите, пожалуйста, какие могут быть решения?

Спасибо!
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
shabelski89
@shabelski89
engineer
вот как я качаю торрент файл из одного известного трекера
with requests.Session() as session:
        cookies = dict(uid=uid, usess=usess)
        auth = dict(username=login, password=password)  # Данные в виде словаря, которые отправлятся в POST
        r = session.get(url, timeout=5)  # Получаем страницу с формой логина
        r.encoding = 'utf-8'
        session.post(url, auth)  # Отправляем данные в POST, в session записываются наши куки
        r = session.get(link, cookies=cookies, timeout=5)
        open('some_file_name', 'wb').write(r.content)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы