Python grequests模块使用场景及代码实例

 更新时间:2020年08月10日 10:10:11   作者:Yi_warmth  
这篇文章主要介绍了Python grequests模块使用场景及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用场景:

1) 爬虫设置ip代理池时验证ip是否有效

2)进行压测时,进行批量请求等等场景

grequests 利用 requests和gevent库,做了一个简单封装,使用起来非常方便。

grequests.map(requests, stream=False, size=None, exception_handler=None, gtimeout=None)

另外,由于grequests底层使用的是requests,因此它支持

GET,OPTIONS, HEAD, POST, PUT, DELETE 等各种http method

所以以下的任务请求都是支持的

grequests.post(url, json={“name”:“zhangsan”})
grequests.delete(url)

代码如下:

import grequests

urls = [
  'http://www.baidu.com',
  'http://www.qq.com',
  'http://www.163.com',
  'http://www.zhihu.com',
  'http://www.toutiao.com',
  'http://www.douban.com'
]
rs = (grequests.get(u) for u in urls)
print(grequests.map(rs))  # [<Response [200]>, None, <Response [200]>, None, None, <Response [418]>]
def exception_handler(request, exception):
  print("Request failed")
reqs = [
  grequests.get('http://httpbin.org/delay/1', timeout=0.001),
  grequests.get('http://fakedomain/'),
  grequests.get('http://httpbin.org/status/500')
]
print(grequests.map(reqs, exception_handler=exception_handler))

实际操作中,也可以自定义返回的结果

修改grequests源码文件:

例如:

新增extract_item() 函数合修改map()函数

def extract_item(request):
  """
  提取request的内容
  :param request:
  :return:
  """
  item = dict()
  item["url"] = request.url
  item["text"] = request.response.text or ""
  item["status_code"] = request.response.status_code or 0
  return item

def map(requests, stream=False, size=None, exception_handler=None, gtimeout=None):
  """Concurrently converts a list of Requests to Responses.

  :param requests: a collection of Request objects.
  :param stream: If True, the content will not be downloaded immediately.
  :param size: Specifies the number of requests to make at a time. If None, no throttling occurs.
  :param exception_handler: Callback function, called when exception occured. Params: Request, Exception
  :param gtimeout: Gevent joinall timeout in seconds. (Note: unrelated to requests timeout)
  """
  requests = list(requests)
  pool = Pool(size) if size else None
  jobs = [send(r, pool, stream=stream) for r in requests]
  gevent.joinall(jobs, timeout=gtimeout)
  ret = []
  for request in requests:

    if request.response is not None:
      ret.append(extract_item(request))
    elif exception_handler and hasattr(request, 'exception'):
      ret.append(exception_handler(request, request.exception))
    else:
      ret.append(None)

  yield ret

可以直接调用:

import grequests
urls = [
  'http://www.baidu.com',
  'http://www.qq.com',
  'http://www.163.com',
  'http://www.zhihu.com',
  'http://www.toutiao.com',
  'http://www.douban.com'
]
rs = (grequests.get(u) for u in urls)
response_list = grequests.map(rs, gtimeout=10)
for response in next(response_list):
  print(response)

支持事件钩子

def print_url(r, *args, **kwargs):
print(r.url)

url = “http://www.baidu.com”
res = requests.get(url, hooks={“response”: print_url})
tasks = []
req = grequests.get(url, callback=print_url)
tasks.append(req)
ress = grequests.map(tasks)
print(ress)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python实例详解递归算法

    Python实例详解递归算法

    递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。本文将详细为大家介绍Python中的递归算法,需要的可以参考一下
    2022-03-03
  • Python删除Java源文件中全部注释的实现方法

    Python删除Java源文件中全部注释的实现方法

    这篇文章主要介绍了Python删除Java源文件中全部注释的实现方法,涉及Python读取文件、正则匹配、字符串查找、替换等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • pycharm上的python虚拟环境移到离线机器上的方法步骤

    pycharm上的python虚拟环境移到离线机器上的方法步骤

    本人在工作中需要在离线Windows环境中使用,本文主要介绍了pycharm上的python虚拟环境移到离线机器上的方法步骤,具有一定的参考价值,感兴趣的可以了解一下
    2021-10-10
  • Python3.4学习笔记之列表、数组操作示例

    Python3.4学习笔记之列表、数组操作示例

    这篇文章主要介绍了Python3.4列表、数组操作,结合实例形式分析了Python3.4列表的创建、元素追加、删除、排序等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • 用Python selenium实现淘宝抢单机器人

    用Python selenium实现淘宝抢单机器人

    今天给大家带来的是关于Python实战的相关知识,文章围绕着用Python selenium实现淘宝抢单机器人展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 在Linux下使用命令行安装Python

    在Linux下使用命令行安装Python

    这篇文章主要介绍了在Linux下使用命令行安装Python,通过详细的图文介绍Linux安装Python的全部过程,希望对你有所帮助
    2021-06-06
  • Python+Flask编写一个简单的行人检测API

    Python+Flask编写一个简单的行人检测API

    Flask是一个微型的Python开发的Web框架,基于Werkzeug WSGI工具箱和Jinja2模板引擎。本文将利用Flask框子编写一个简单的行人检测API,感兴趣的可以了解一下
    2022-03-03
  • 在python下使用tensorflow判断是否存在文件夹的实例

    在python下使用tensorflow判断是否存在文件夹的实例

    今天小编就为大家分享一篇在python下使用tensorflow判断是否存在文件夹的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python制作动态字符画的源码

    Python制作动态字符画的源码

    python字符画是一个简单有趣的图画,它一般由程序制作而成,接下来通过本文给大家分享Python制作动态字符画的源码,需要的朋友可以参考下
    2021-08-08
  • Python 字符替换的四方法

    Python 字符替换的四方法

    本文主要介绍了Python 字符替换的四方法,主要包括replace、translate、maketrans 和正则这是四种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论