为什么我无法使用 grequest 从响应中提取数据?


import grequests
import time
start_time = time.time()
sites = ['https://facebook.com' for x in range(5)]
data = {'a': 'b'}

responses = [grequests.get(u, data=data) for u in sites]
for response in responses:
print(response)
print(f'{response.text}')
print("--- %s seconds ---" % (time.time() - start_time))

当我尝试通过.text方法获取数据时,我有一个错误:

AttributeError: 'AsyncRequest' object has no attribute 'text'

即使我试图获得status_code,我也有相同的错误,缺少属性

修复我搜索pip3 install --upgrade gevent==1.1rc3返回错误的命令:fatal error: Python.h: No such file or directory进入5 | #include "Python.h"

当模块使用async时,它可能会在单独的线程中运行代码,它不会等待结果,但它会给你对象,你可以稍后使用它来检查是否已经有结果。在一些模块中,你可以使用await来等待结果(但这只适用于async函数,它需要运行async循环),但一些模块有特殊的函数来等待结果。

grequests对此也有特殊的功能-您应该在官方示例中看到

responses = grequests.map(responses)

如果你使用它,那么你得到对象列表<Response>。没有map(),你只能得到<grequests.AsyncRequest>对象的列表


最小工作示例:

import grequests
import time
start_time = time.time()

sites = ['https://facebook.com' for x in range(5)]
data = {'a': 'b'}
responses = [grequests.get(u, data=data) for u in sites]
# wait for all results
responses = grequests.map(responses)
for response in responses:
print('response:', response)
print('status_code:', response.status_code)
print('text:', response.text)
print("--- %s seconds ---" % (time.time() - start_time))

最新更新