不使用grequests.map()的延时grequest

时间:2014-08-25 18:25:17

标签: python python-requests 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.contentjob.content访问html回复,但都无效。

1 个答案:

答案 0 :(得分:4)

当然,在写这个问题时,我意识到我没有尝试访问res.content,这正是我所需要的。

获得的经验教训:返回到grequests.get()语句中的响应挂钩的对象具有content属性,该属性包含从服务器发送的响应的文本。