geekdoc-python-zh/docs/pythonlibrary/python-101-how-to-download-...

3.2 KiB
Raw Permalink Blame History

Python 101:如何下载文件

原文:https://www.blog.pythonlibrary.org/2012/06/07/python-101-how-to-download-a-file/

从互联网上下载文件是几乎每个程序员都必须做的事情。Python 在其标准库中提供了几种方法来实现这一点。下载文件最流行的方式可能是使用 urllib 或 urllib2 模块通过 HTTP。Python 还附带了 FTP 下载的 ftplib。最后有一个新的第三方模块得到了很多关注称为请求。对于本文,我们将重点关注两个 urllib 模块和请求。

由于这是一个非常简单的任务,我们将只展示一个快速而肮脏的脚本,该脚本下载每个库的相同文件,并将结果命名为稍微不同的名称。我们将从这个博客下载一个压缩文件作为我们的示例脚本。让我们来看看:

# Python 2 code
import urllib
import urllib2
import requests

url = 'https://www.blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip'

print "downloading with urllib"
urllib.urlretrieve(url, "code.zip")

print "downloading with urllib2"
f = urllib2.urlopen(url)
data = f.read()
with open("code2.zip", "wb") as code:
    code.write(data)

print "downloading with requests"
r = requests.get(url)
with open("code3.zip", "wb") as code:
    code.write(r.content)

如您所见, urllib 只是一行代码。它的简单性使得它非常容易使用。另一方面,其他两个库也非常简单。对于 urllib2 ,你只需要打开网址,然后读取并写出数据。事实上,您可以通过执行以下操作将这部分脚本减少一行:

f = urllib2.urlopen(url)
with open("code2.zip", "wb") as code:
    code.write(f.read())

无论哪种方式,它都非常有效。请求库方法是获取,对应 HTTP 获取。然后,您只需获取请求对象并调用其内容属性来获取您想要写入的数据。我们将语句一起使用因为它会自动关闭文件并简化代码。注意如果文件很大只使用“read()”可能会有危险。通过传递 read a 大小,会更好的阅读。

更新(2012 年 6 月 8 日)

正如我的一位读者所指出的,如果你通过 2to3.py 运行 urllib它的内容会发生很大的变化因此它是 Python 3 格式的。为了完整起见,下面是代码的样子:

# Python 3 code
import urllib.request

url = 'https://www.blog.pythonlibrary.org/wp-content/uploads/2012/06/wxDbViewer.zip'

print("downloading with urllib")
urllib.request.urlretrieve(url, "code.zip")

print("downloading with urllib2")
f = urllib.request.urlopen(url)
data = f.read()
with open("code2.zip", "wb") as code:
    code.write(data) 

你会注意到 urllib2 不再存在,并且 urllib.urlretrieveurllib2.urlopen 分别变成了URL lib . request . URL retrieveurllib.request.urlopen 。其余都一样。为了简洁起见,我删除了请求部分。

所以你有它!现在你也可以开始使用 Python 2 或 3 下载文件了!

进一步阅读

  • 如何使用 Python 通过 HTTP 下载文件?
  • 通过网络下载文件食谱