Python –从URL下载文件

时间:2020-02-23 14:42:39  来源:igfitidea点击:

从URL下载文件是Python脚本中非常常见的任务。
一个真实的例子是将图像从下载到本地系统,然后在我们的Python程序中进行处理。

在本教程中,我们将学习从Python中的URL下载文件的不同方法。

使用请求库从Python脚本中的URL下载文件

如果您的要求是使用GET HTTP请求从给定的URL获取文件,那么Python requests模块非常适合您。

import requests

file_url = 'https://www.theitroad.local/wp-content/uploads/2019/08/Python-Tutorial.png'

file_object = requests.get(file_url)

with open('Python-Tutorial.png', 'wb') as local_file:
  local_file.write(file_object.content)

该文件将下载到与Python脚本相同的目录中。
如果要更改目录位置,可以在open()函数调用中提供完整路径或者相对路径。

Linux迷?使用Python wget库从URL下载文件

如果您喜欢Linux命令并且希望在Python程序中具有类似的风格,则可以使用wget库从URL下载文件。

Python wget库不是默认安装的一部分,因此您可以使用PIP软件包管理器进行安装。

# pip install wget

这是使用wget库从URL下载文件的Python程序。

import wget

file_url = 'https://www.theitroad.local/wp-content/uploads/2019/08/Python-Tutorial.png'

dest_file = '/Users/hyman/pt.png'

wget.download(file_url, dest_file)

目标文件参数是可选的。
如果我们不提供该文件,则文件将与脚本保存在同一目录中,文件名将与远程文件名相同。

从重定向的URL下载文件

有时,我们会获得简短的URL,这些URL会重定向到实际文件。
请求库的get()方法自动遵循重定向并下载实际文件。
如果看一下get()实现,它会将allow_redirects参数设置为True

def get(url, params=None, **kwargs):
  kwargs.setdefault('allow_redirects', True)
  return request('get', url, params=params, **kwargs)

从Python中的URL下载大文件

如果文件很大,那么一次获取所有内容不是一个好主意。
这将需要大量内存,并可能导致内存不足错误。

我们可以将stream = True传递给请求get()方法,以打开文件流并分块下载。
然后,我们可以使用for循环读取块并将其写入本地文件。

import requests

file_url = 'https://www.theitroad.local/wp-content/uploads/2019/08/Python-Tutorial.png'

file_stream = requests.get(file_url, stream=True)

with open('Python-Tutorial.png', 'wb') as local_file:
  for data in file_stream:
      local_file.write(data)

print('Done')