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


Posted in Python onAugust 10, 2020

使用场景:

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

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

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

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

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

另外,由于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 grequests模块使用场景及代码实例

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

Python 相关文章推荐
Python的Django框架中的数据库配置指南
Jul 17 Python
Django日志模块logging的配置详解
Feb 14 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
Django中间件实现拦截器的方法
Jun 01 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
三个python爬虫项目实例代码
Dec 28 Python
快速查找Python安装路径方法
Feb 06 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
基于tensorflow权重文件的解读
May 26 Python
Python基本知识点总结
Apr 07 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 #Python
Python Celery异步任务队列使用方法解析
Aug 10 #Python
使用Python将语音转换为文本的方法
Aug 10 #Python
Python获取excel内容及相关操作代码实例
Aug 10 #Python
Python利用命名空间解析XML文档
Aug 10 #Python
Python如何定义有默认参数的函数
Aug 10 #Python
如何更换python默认编辑器的背景色
Aug 10 #Python
You might like
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python二分查找算法的递归实现方法
2016/05/12 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
python里反向传播算法详解
2020/11/22 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
岗位职责怎么写
2014/03/14 职场文书
学雷锋的心得体会
2014/09/04 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
浅谈Python数学建模之整数规划
2021/06/23 Python