如何通过HTTP下载文件?

1155 投票
31 回答
1575698 浏览
提问于 2025-04-10 23:54

我有一个小工具,用来定时从网站下载一个MP3文件,然后生成或更新一个我已经添加到iTunes里的播客XML文件。

生成和更新这个XML文件的文本处理部分是用Python写的。不过,我在Windows的一个.bat文件里用wget来下载实际的MP3文件。我希望整个工具都用Python来写。

我一直在找方法用Python下载文件,所以才不得不使用wget

那么,怎样才能用Python下载这个文件呢?

31 个回答

426

在2012年,可以使用python的requests库

>>> import requests
>>> 
>>> url = "http://download.thinkbroadband.com/10MB.zip"
>>> r = requests.get(url)
>>> print len(r.content)
10485760

你可以运行pip install requests来安装它。

相比其他选择,Requests有很多优点,因为它的使用方法简单得多。特别是当你需要进行身份验证时,这一点尤为明显。urllib和urllib2在这方面使用起来相当不直观,挺麻烦的。


2015年12月30日

大家对进度条表示赞赏。确实很酷。现在有几种现成的解决方案,包括tqdm

from tqdm import tqdm
import requests

url = "http://download.thinkbroadband.com/10MB.zip"
response = requests.get(url, stream=True)

with open("10MB", "wb") as handle:
    for data in tqdm(response.iter_content()):
        handle.write(data)

这基本上是@kvance在30个月前描述的实现方式。

1377

再来一个,使用 urlretrieve

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

(如果你用的是Python 2,记得用 import urlliburllib.urlretrieve

564

使用 urllib.request.urlopen()

import urllib.request
with urllib.request.urlopen('http://www.example.com/') as f:
    html = f.read().decode('utf-8')

这是使用这个库的最基本方法,没有任何错误处理。你还可以做一些更复杂的事情,比如更改请求头。

在Python 2中,这个方法在 urllib2 中:

import urllib2
response = urllib2.urlopen('http://www.example.com/')
html = response.read()

撰写回答