不使用grequests.map()的时间延迟grequests
这是我第一次尝试使用一个文档和示例代码都不太完善的库,所以请多多包涵。我对Requests库有一点点了解,但我需要每秒向一个特定地址发送单独的请求:
- 不需要等第一个请求完成,就可以处理每个请求的响应
- 每个响应的内容需要单独解析
- 同时还要限制总的连接数
我搞不清楚怎么才能同时满足这些条件。虽然grequests.map()
可以让我得到我想要的响应内容,但它只能在所有请求完成后一次性返回。而grequests.send()
似乎只返回一个响应对象,这个对象里面没有网页的html文本。(我可能对grequests.send()
的理解有误,但我还没找到能从这个对象中提取内容的例子)
这是我目前写的代码:
import grequests
from time import sleep
def print_res(res, **kwargs):
print res
print kwargs
headers = {'User-Agent':'Python'}
req = grequests.get('http://stackoverflow.com', headers=headers, hooks=dict(response=print_res), verify=False)
for i in range(3):
job = grequests.send(req, grequests.Pool(10))
sleep(1)
我得到的响应是:
1
<Response [200]>
{'verify': False, 'cert': None, 'proxies': {'http': 'http://127.0.0.1:8888', 'ht
tps': 'https://127.0.0.1:8888'}, 'stream': False, 'timeout': None}
2
<Response [200]>
{'verify': False, 'cert': None, 'proxies': {'http': 'http://127.0.0.1:8888', 'ht
tps': 'https://127.0.0.1:8888'}, 'stream': False, 'timeout': None}
3
<Response [200]>
{'verify': False, 'cert': None, 'proxies': {'http': 'http://127.0.0.1:8888', 'ht
tps': 'https://127.0.0.1:8888'}, 'stream': False, 'timeout': None}
我尝试用req.content
和job.content
来访问html响应,但都不行。
1 个回答
5
当然,在写这个问题的时候,我意识到我没有尝试去访问 res.content
,结果发现这正是我需要的东西。
教训是:在 grequests.get()
这个语句中返回的对象有一个 content
属性,这个属性里面包含了服务器发送的响应文本。