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()来异步发送所有下载请求。 

posted @   北京测试菜鸟  阅读(328)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示