Shivam Mitra
Shivam Mitra

Reputation: 1052

Downloading a song through python-requests

I was trying to make a script to download songs from internet. I was first trying to download the song by using "requests" library. But I was unable to play the song. Then, I did the same using "urllib2" library and I was able to play the song this time.

Can't we use "requests" library to download songs? If yes, how?

Code by using requests:

import requests
doc = requests.get("http://gaana99.com/fileDownload/Songs/0/28768.mp3")
f = open("movie.mp3","wb")
f.write(doc.text)
f.close()

Code by using urllib2:

import urllib2
mp3file = urllib2.urlopen("http://gaana99.com/fileDownload/Songs/0/28768.mp3")
output = open('test.mp3','wb')
output.write(mp3file.read())
output.close()

Upvotes: 11

Views: 17686

Answers (2)

Mark K
Mark K

Reputation: 9348

A similar way from here:

import urllib.request 
urllib.request.urlretrieve('http://gaana99.com/fileDownload/Songs/0/28768.mp3', 'movie.mp3')

Upvotes: 1

Tiger-222
Tiger-222

Reputation: 7150

Use doc.content to save binary data:

import requests

doc = requests.get('http://gaana99.com/fileDownload/Songs/0/28768.mp3')
with open('movie.mp3', 'wb') as f:
    f.write(doc.content)

Explanation

A MP3 file is only binary data, you cannot retrieve its textual part. When you deal with plain text, doc.text is ideal, but for any other binary format, you have to access bytes with doc.content.

You can check the used encoding, when you get a plain text response, doc.encoding is set, else it is empty:

>>> doc = requests.get('http://gaana99.com/fileDownload/Songs/0/28768.mp3')
>>> doc.encoding
# nothing

>>> doc = requests.get('http://www.example.org')
>>> doc.encoding
ISO-8859-1

Upvotes: 29

Related Questions