用 Python 下载文件
Python 经常用于访问 Internet 上的资源。我们可以使用不同的库生成请求和连接。这些库还可以帮助我们从 Web 下载或读取 HTTP 文件。
在本教程中,我们将使用 Python 从 Internet 下载文件。
在 Python 中使用 requests
模块下载文件
我们可以使用 requests
模块从互联网上检索信息和阅读网页。
get()
方法有助于从要下载文件的给定 URL 中检索文件的路径。open()
方法创建一个我们希望保存文件的文件对象,然后 write()
函数用于将文件内容写入所需的路径。
我们使用这些函数来下载文件,如下所示。
import requests as req
URL = 'https://www.facebook.com/favicon.ico'
file = req.get(url, allow_redirects=True)
open('facebook.ico', 'wb').write(file.content)
输出:
1150
上面的代码从其 URL 下载 Facebook 的徽标文件并将其存储在工作目录中。我们可以在 open() 函数中指定任何路径,但我们必须以 wb
模式打开它。这表明我们打算以二进制模式写入文件。
上面的例子适用于下载较小的文件,但对于大文件效率不高。file.content
函数用于以单个字符串的形式获取文件内容。由于我们在上面的例子中使用了一个小文件,它工作正常。
如果我们必须下载一个大文件,那么我们应该使用 file.iter_content()
函数,我们将在其中指定块大小。它以块的形式下载数据。
我们在以下示例中使用此函数。
import requests
URL = "http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ch1-2.pdf"
file = requests.get(URL, stream = True)
with open("Python.pdf","wb") as pdf:
for chunk in file.iter_content(chunk_size=1024):
if chunk:
pdf.write(chunk)
在 Python 中使用 urllib
模块下载文件
我们还可以使用 Python 中的 urllib
库从 Web 下载和读取文件。这是一个 URL 处理模块,具有不同的功能来执行给定的任务。
在这里,我们还必须指定要下载的文件的 URL。urllib.request.urlopen()
方法获取文件的路径并向正在下载文件的服务器发送请求。
要下载文件,我们可以使用 urllib.request.urlretrieve()
函数。它将从给定地址下载资源并将其存储在提供的目录中。
我们在下面的例子中使用这种方法下载 Facebook 的图标。
import urllib
urllib.request.urlretrieve("https://www.facebook.com/favicon.ico", "fb.ico")
输出:
('fb.ico', <http.client.HTTPMessage at 0x2d2d317a088>)
上面的输出表明文件下载成功。
在 Python 中使用 pycurl
模块下载文件
我们可以使用此模块的文件处理从 Internet 下载文件。首先,我们必须为我们希望下载所需文件的位置创建一个文件对象。然后,我们将使用 pycurl.Curl()
函数来创建一个对象并启动 curl 会话。
setopt()
方法用于设置文件的 URL 值。接下来,perform()
函数通过发送 HTTP 请求从服务器执行文件传输过程。接下来,我们将使用文件对象将检索到的数据写入文件。最后,close()
方法关闭会话,我们将文件下载到工作目录中。
请参考下面的代码。
import pycurl
file_name = 'fb.ico'
file_src = 'https://www.facebook.com/favicon.ico'
with open(file_name, 'wb') as f:
cl = pycurl.Curl()
cl.setopt(cl.URL, file_src)
cl.setopt(cl.WRITEDATA, f)
cl.perform()
cl.close()