python,import requests,url = 'http://example.com/file',response = requests.get(url),with open('filename', 'wb') as f:, f.write(response.content),
“
1、安装requests库
在命令行(Windows下是cmd,Linux或Mac下是终端)中输入以下命令来安装requests
库:
pip install requests
2、下载文件的代码示例
import requests def download_file(url, local_filename): # 发送HTTP GET请求到指定的URL with requests.get(url, stream=True) as r: # 如果响应状态码不是200(OK),抛出异常 r.raise_for_status() # 以二进制写模式打开本地文件,用于保存下载的文件内容 with open(local_filename, 'wb') as f: # 按块读取响应内容并写入文件,这样可以处理大文件而不会占用过多内存 for chunk in r.iter_content(chunk_size=8192): if chunk: # 过滤掉保持活动的新空块 f.write(chunk) # 调用函数下载文件,例如从http://example.com/somefile.zip下载文件并保存为localfile.zip download_file('http://example.com/somefile.zip', 'localfile.zip')
3、代码解释
首先导入requests
库。
定义一个名为download_file
的函数,它接受两个参数:url
(要下载文件的网址)和local_filename
(保存到本地的文件名)。
在函数内部,使用requests.get
方法发送HTTP GET请求到指定的URL,并将stream
参数设置为True
,这样可以流式下载文件。
通过r.raise_for_status()
检查响应状态码,如果不是200,就会引发HTTPError异常。
使用open
函数以二进制写模式('wb'
)打开本地文件,准备将下载的数据写入该文件。
利用r.iter_content(chunk_size=8192)
按块读取响应内容,每次读取8KB的数据(可以根据需要调整块大小),然后写入本地文件,如果读取到的块不为空,就将其写入文件。
二、使用urllib
库(Python标准库)
1、下载文件的代码示例
import urllib.request def download_file(url, local_filename): # 发送HTTP请求并获取响应对象 with urllib.request.urlopen(url) as response: # 以二进制写模式打开本地文件,用于保存下载的文件内容 with open(local_filename, 'wb') as out_file: # 将响应内容写入本地文件 data = response.read() out_file.write(data) # 调用函数下载文件,例如从http://example.com/somefile.zip下载文件并保存为localfile.zip download_file('http://example.com/somefile.zip', 'localfile.zip')
2、代码解释
导入urllib.request
模块。
定义download_file
函数,参数含义同前。
在函数内部,使用urllib.request.urlopen(url)
发送HTTP请求并获取响应对象。
以二进制写模式打开本地文件,然后使用response.read()
读取整个响应内容(对于小文件比较合适,如果是大文件可能会占用较多内存),最后将读取到的数据写入本地文件。
问题1:如果下载过程中网络连接中断怎么办?
答:可以添加重试机制,在requests
方式中,可以使用一个循环来尝试重新下载,当捕获到特定的异常(如网络相关的异常)时,等待一段时间后再次尝试下载,可以设置一个最大重试次数,避免无限循环,在urllib
方式下也可以采用类似的思路,通过捕获异常来实现重试逻辑。
问题2:如何指定下载文件的保存路径?
答:在上述代码中,local_filename
参数就是用于指定保存路径和文件名的,可以将文件保存到任意合法的文件路径下,只需要在调用函数时正确设置这个参数即可,如果要将文件保存到D:\Downloads
目录下的myfiles
文件夹中,并且文件名为newfile.zip
,那么在调用函数时可以这样写:`download_file(‘http://example.com/somefile.zip’, ‘D:\Downloads\myfiles
ewfile.zip’)`。