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 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
处理Python中的URLError异常的方法
Apr 30 Python
Python中返回字典键的值的values()方法使用
May 22 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
详解Python pygame安装过程笔记
Jun 05 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
linux查找当前python解释器的位置方法
Feb 20 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
jupyter notebook 的工作空间设置操作
Apr 20 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
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
php实现微信支付之退款功能
2018/05/30 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
JS判断微信扫码的方法
2017/08/07 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
谈谈python中GUI的选择
2018/03/01 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
自我鉴定注意事项
2014/01/19 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书