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下利用OpenCV来旋转图像的教程
Apr 16 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python爬虫基本知识
Mar 05 Python
Python制作动态字符图的实例
Jan 27 Python
python try 异常处理(史上最全)
Mar 07 Python
CentOS7安装Python3的教程详解
Apr 10 Python
Django学习笔记之为Model添加Action
Apr 30 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 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
Terran魔法科技
2020/03/14 星际争霸
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
javascript Excel操作知识点
2009/04/24 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
django 简单实现登录验证给你
2019/11/06 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
keras输出预测值和真实值方式
2020/06/27 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
《猴子种树》教学反思
2014/02/14 职场文书
创业融资计划书
2014/04/25 职场文书
公司门卫工作职责
2014/06/28 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
课题研究阶段性总结
2015/08/13 职场文书
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
Vue操作Storage本地化存储
2022/04/29 Vue.js