python - 不使用 grequests.map() 的延时 grequests

标签 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 响应,但都不起作用。

最佳答案

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

经验教训:在 grequests.get() 语句中返回到响应 Hook 的对象有一个 content 属性,其中包含从服务器。

关于python - 不使用 grequests.map() 的延时 grequests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492110/

相关文章:

python - 为什么具有正确 header 的 requests.get 返回空内容?

session - 是否可以设置同一 session 中所有池连接之间共享的最大重试次数?

python - greqests.map 中的 url 太多导致 gevent.hub.LoopExit 仅在 mac 上

python - 如何将请求响应与请求映射?

python - Python2、Python3、PyPy2、PyPy3 之间的区别

python - 有没有办法用 python 检查列表中的字符串是否是普通英语中使用的真实单词?

python - 处理神经网络中未定义的数据

Python - 如何使用 'requests & BeautifulSoup' 抓取 Tr/Td 表数据

python - 使用 Python 的 HTTPS 服务器

python - 可能的谷歌谜语?