import requests
res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
res.raise_for_status()
playFile = open('xx_RomeoAndJuliet.txt', 'wb')
for chunk in res.iter_content(100000):
playFile.write(chunk)
playFile.close()
iter_content()
方法在循环的每次迭代中,返回一段内容。
每一段都是 bytes
数据类型,需要指定一段包含多少字节。
10万字节通常是不错的选择,所以将100000作为参数传递给 iter_content()
。
文件 RomeoAndJuliet.txt
将存在于当前工作目录。
请注意,虽然在网站上文件名是 pglll2.txt
,
但在硬盘上,该文件的名字不同。 requests
模块只处理下载网页内容。
一旦网页下载后,它就只是程序中的数据。
即使在下载该网页后断开了因特网连接,该页面的所有数据仍然会在计算机中。
write()
方法返回一个数字,表示写入文件的字节数。
在前面的例子中,第一段包含100000个字节,文件剩下的部分只需要78981个字节。
回顾一下,下载并保存到文件的完整过程如下:
- 调用
requests.get()
下载该文件。 - 用
'W'
调用open()
,以写二进制的方式打开一个新文件。 - 利用
Respose
对象的iter_content()
方法做循环。 - 在每次迭代中调用
write()
,将内容写入该文件。 - 调用
close()
关闭该文件。
以上完整介绍了 requests
模块的核心功能。相较于传统的文件操作三步曲(open()/write()/close()
),
requests
通过 for
循环配合 iter_content()
方法实现了更智能的内存管理机制——该方法采用流式下载技术,
将大文件切割为可配置大小的数据块(默认 1MB),确保即使处理 GB 级文件时内存占用也能保持稳定。
这种设计使得 requests
模块在保持 API 简洁性的同时,兼具处理海量数据的能力。