用Python从网页下载Excel文件

22 投票
4 回答
107898 浏览
提问于 2025-04-18 17:59

我有一个这样的网页地址:

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

我尝试下载这个文件:

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

这导致生成了一个叫“test.xls”的文件,但这显然是一个html文件。如果我在Firefox浏览器中打开这个html文件,它会打开一个Excel文件,但如果我在Excel中打开这个文件,它绝对不是我想要的Excel文件。

如果我有像上面这样的网页地址,我该如何让Python下载这个Excel文件,并确保它是一个真正的Excel文件呢?

4 个回答

5

这里有两个问题,一个是代码的问题(见下文),另一个是网址不对。现代的网页浏览器会自动把 "http://www.muellerindustries.com/uploads/pdf/UW SPD0114.xls" 这个链接修正为 "http://www.muellerindustries.com/uploads/pdf/UW%20SPD0114.xls",但是Python不会这样做。

这段代码在我的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) 

这样我就能获取到文件了。

20

为了补充Fedalto的建议(+1),我们可以用上下文管理器让它更符合Python的风格:

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)
42

我建议使用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()

要安装requests库,可以按照以下步骤:

pip install requests
12

这段话的意思是,运行这个脚本后,Excel文件会保存在和脚本一样的文件夹里。

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

撰写回答