Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download a file over HTTP?

I have a small utility that I use to download an MP3 file from a website on a schedule and then builds/updates a podcast XML file which I've added to iTunes.

The text processing that creates/updates the XML file is written in Python. However, I use wget inside a Windows .bat file to download the actual MP3 file. I would prefer to have the entire utility written in Python.

I struggled to find a way to actually download the file in Python, thus why I resorted to using wget.

So, how do I download the file using Python?

like image 808
Owen Avatar asked Aug 22 '08 15:08

Owen


People also ask

Can I download a file in HTTP?

Generally, downloading a file from a HTTP server endpoint via HTTP GET consists of the following steps: Construct the HTTP GET request to send to the HTTP server. Send the HTTP request and receive the HTTP Response from the HTTP server. Save the contents of the file from HTTP Response to a local file.

What is a HTTP download?

Http-download definitionA widely used method for retrieving files from servers on the Internet. All the graphic elements, images and other related files that make up a Web page are downloaded using the HTTP protocol.


1 Answers

One more, using urlretrieve:

import urllib urllib.urlretrieve("http://www.example.com/songs/mp3.mp3", "mp3.mp3") 

(for Python 3+ use import urllib.request and urllib.request.urlretrieve)

Yet another one, with a "progressbar"

import urllib2  url = "http://download.thinkbroadband.com/10MB.zip"  file_name = url.split('/')[-1] u = urllib2.urlopen(url) f = open(file_name, 'wb') meta = u.info() file_size = int(meta.getheaders("Content-Length")[0]) print "Downloading: %s Bytes: %s" % (file_name, file_size)  file_size_dl = 0 block_sz = 8192 while True:     buffer = u.read(block_sz)     if not buffer:         break      file_size_dl += len(buffer)     f.write(buffer)     status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)     status = status + chr(8)*(len(status)+1)     print status,  f.close() 
like image 60
PabloG Avatar answered Sep 20 '22 08:09

PabloG