21

I have the following web address:

dls = "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls"

I tried to download the file:

urllib2.urlopen(dls, "test.xls")

This made a file called "test.xls" but this is clearly an html file. If I opened the html file in firefox it opened an excel file, but if I opened the file in excel it was definitely not the excel file I was looking for.

If I have a web address like the one above, how do I make python download the excel file as an excel file?

zelinka
  • 3,271
  • 6
  • 29
  • 42
  • possible duplicate of [How do I download a zip file in python using urllib2?](http://stackoverflow.com/questions/4028697/how-do-i-download-a-zip-file-in-python-using-urllib2) – zgyarmati Aug 20 '14 at 23:04

4 Answers4

41

I suggest using requests:

import requests
dls = "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls"
resp = requests.get(dls)

output = open('test.xls', 'wb')
output.write(resp.content)
output.close()

To get requests installed:

pip install requests
Nathan Wailes
  • 9,872
  • 7
  • 57
  • 95
Fedalto
  • 1,507
  • 1
  • 10
  • 13
20

To add on to Fedalto's requests suggestion (+1), but make it more Pythonic with a context manager:

import requests
dls = "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls"
resp = requests.get(dls)
with open('test.xls', 'wb') as output:
    output.write(resp.content)
Russia Must Remove Putin
  • 374,368
  • 89
  • 403
  • 331
11

This would save the excel file in the same folder that the script was ran from.

import urllib
dls = "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls"
urllib.request.urlretrieve(dls, "test.xls")  # For Python 3
# urllib.urlretrieve(dls, "test.xls")  # For Python 2
Sergey Shubin
  • 3,040
  • 4
  • 24
  • 36
mnjeremiah
  • 261
  • 3
  • 9
5

Two issues, one with the code (below), the other that the URL is bad. A (modern) web browser will automatically correct "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls" to "http://www.muellerindustries.com/uploads/pdf/UW%20SPD0114.xls" but Python doesn't.

This code works for me on python 3.x

import urllib
outfilename = "test.xls"
url_of_file = "http://www.muellerindustries.com/uploads/pdf/UW%20SPD0114.xls"
urllib.request.urlretrieve(url_of_file, outfilename) 

Which gets me the file.

BKay
  • 1,397
  • 1
  • 15
  • 26