python-Grequests,一个好用的 requests库的异步版本!
Grequests是什么?
grequests是一个Python库,它是requests库的异步版本。它允许你同时发送多个HTTP请求,而不必等待每个请求依次响应。可以在等待服务器响应的同时执行其他任务,从而节省时间并提高效率。
安装Grequests
pip install grequests
使用示例一:批量获取网页
假如有一个网站列表,想快速检查它们是否都能正常访问。使用grequests。下面是一个代码的示例:
import grequests
# 定义一组要访问的URL
urls = [
'https://www.baidu.com',
'https://www.taobao.com',
'https://www.12306.cn/index/',
# 更多URL...
]
# 创建一个请求列表
unsent_requests = (grequests.get(url) for url in urls)
# 使用grequests发送所有请求
results = grequests.map(unsent_requests)
# 输出结果
for response in results:
if response:
print(f'{response.url} - 状态码: {response.status_code}')
else:
print('请求失败')
在这个代码中,我们首先定义了一个URL列表,然后创建了一个未发送请求的生成器。grequests.map()函数接收这个生成器,并发送所有请求,然后返回一个包含响应的列表。最后我们遍历响应列表,打印出每个URL的状态码。
使用示例二:异步下载多个文件
如果你需要下载多个文件,grequests也可以做到。以下是一个下载多个图片并保存到本地的示例:
import os
import grequests
# 定义图片链接列表
image_urls = [
'https://example.com/image1.jpg',
'https://example.com/image2.jpg',
'https://example.com/image3.jpg',
# 更多图片链接...
]
# 准备下载函数
def download_image(response, *args, **kwargs):
if response.status_code == 200:
# 从URL中提取图片名称
image_name = os.path.basename(response.url)
# 打开一个文件用于写入二进制数据
with open(image_name, 'wb') as f:
f.write(response.content)
print(f'下载完成: {image_name}')
# 创建请求列表
unsent_requests = (grequests.get(url, stream=True, hooks={'response': download_image}) for url in image_urls)
# 发送请求
grequests.map(unsent_requests)
在这个代码中,定义了一个图片链接列表,为每个下载请求指定了一个回调函数download_image,它会在响应到达时触发。通过在请求中设置stream=True,告诉grequests以流式传输的方式获取数据,这对于大文件下载非常有用。hooks参数则用于指定回调函数。最后,我们使用grequests.map()来异步发送所有下载请求。

浙公网安备 33010602011771号