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')