python-Grequests,一个好用的 requests库的异步版本!
Grequests是什么?
grequests
是一个Python库,它是requests
库的异步版本。它允许你同时发送多个HTTP请求,而不必等待每个请求依次响应。可以在等待服务器响应的同时执行其他任务,从而节省时间并提高效率。
安装Grequests
1 | pip install grequests |
使用示例一:批量获取网页
假如有一个网站列表,想快速检查它们是否都能正常访问。使用grequests
。下面是一个代码的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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
也可以做到。以下是一个下载多个图片并保存到本地的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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()
来异步发送所有下载请求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?