Получение поврежденного mp3 после загрузки файла с использованием запросов в Python

#python #python-requests #mp3 #urllib

#python #python-запросы #mp3 #urllib

Вопрос:

Я пытаюсь загрузить mp3-файл, используя requests в Python

пример URL-адреса — https://example.net/song.mp3

 r = requests.get(downnloadLink)

with open(r"C:UsersshreyDesktoptest.mp3", 'wb') as f:
    f.write(r.content)
    print("Downloaded!")
 

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

Похоже, что он не загружается в надлежащем формате

Комментарии:

1. Загрузите файл с помощью браузера, затем сравните его хэш с тем, который вы загрузили с помощью скрипта. Проверьте, совпадают ли они

Ответ №1:

Я думаю, что вы загружаете содержимое html. Вы должны проверить, является ли то, что вы загрузили, «mp3». Итак, сначала загрузите файл с помощью обычного браузера, затем сравните его с файлом, загруженным с помощью вашего скрипта. Вы можете просто сравнить их хэши, чтобы увидеть, совпадают ли они.

Но если вам нужен просто скрипт для загрузки mp3, вы можете использовать следующий скрипт.

 import requests
url = "URL FOR THE MUSIC FILE"

def DownloadFile(url):
    local_filename = 'test.mp3'
    r = requests.get(url)
    with open(local_filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024): 
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)
    return None

DownloadFile(url)

 

Ответ №2:

Дело в том, что Windows как бы пропускает шаг при загрузке файла .mp3 с помощью Python. Однако это не то, что происходит с Linux.

Чтобы загрузить файлы .mp3 в Linux, вам нужно попытаться открыть файл в режиме двоичного файла. открыть (mp3Name, «wb») Вероятно, вы получаете переводы конца строки.

Файл является двоичным, да. Это режим, которого не было. При открытии файла его можно настроить для чтения как текстовый файл (это по умолчанию). Когда это произойдет, он преобразует окончания строк в соответствии с платформой. В Windows концы строк — r n, В большинстве других мест это либо r, либо n . Это изменение портит поток данных