如何通过HTTP下载文件?
我有一个小工具,用来定时从网站下载一个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 urllib
和 urllib.urlretrieve
)
564
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()