Python模块-requests(一)

requests不是python自带的,使用前需要安装

  • 发送请求

HTTP请求类型有GET,POST,PUT,DELETE,HEAD和OPTIONS

使用requests发送请求的方法如下:

>>> import requests
>>> r = requests.get("http://httpbin.org/get") #发送GET请求
>>> r = requests.post("http://httpbin.org/post") #发送POST请求
>>> r = requests.put("http://httpbin.org/put") #发送PUT请求
>>> r = requests.delete("http://httpbin.org/delete") #发送DELETE请求
>>> r = requests.head("http://httpbin.org/get") #发送HEAD请求
>>> r = requests.options("http://httpbin.org/get") #发送OPTIONS请求
  • 传递URL参数

params参数会对传入的参数进行拼接处理

通常使用params传的参数为字典的格式

>>> import requests
>>> payload = {"word":"test","page":11}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url) #打印r里的url参数的值
http://httpbin.org/get?word=test&page=11

字典里的值还可以是列表

>>> payload = {"word":"test","page":[1,2,3]}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url)
http://httpbin.org/get?word=test&page=1&page=2&page=3

字典中的值为None的键将不会被传参数到url里

>>> payload = {"word":"test","page":None}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url)
http://httpbin.org/get?word=test

params传的参数也可以直接是字符串

>>> payload = "word=test&page=11"
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print(r.url)
http://httpbin.org/get?word=test&page=11
  • 响应内容

requests能读取服务器响应的内容

>>> r = requests.get("https://www.cnblogs.com/")
>>> r.text #获取网页源代码
‘‘‘此处为网页源代码‘‘‘
>>> r.encoding #查看网页源代码的编码
‘utf-8‘
>>> r.encoding = ‘GBK‘ #把网页源码的编码改为gbk
>>> r.encoding #再调用的时候,发现网页编码变成了gbk了
‘GBK‘
  • 二进制响应内容

对于非文本请求,requests也能用字节的方式来访问请求响应体

>>> r = requests.get("http://p1.ifengimg.com/a/2018_06/75880eeacd0823d_size11_w230_h152.jpg")
>>> r.content
‘‘‘此处为bytes类型的图片内容‘‘‘
>>> r.text
‘‘‘一堆乱码‘‘‘

该方式也能用于文本请求,不过返回的结果为bytes类型

>>> r = requests.get("https://www.cnblogs.com/")
>>> r.text
‘‘‘此处为文本类型的网页源代码‘‘‘
>>> r.content
‘‘‘此处为bytes类型的网页源代码‘‘‘
  • JSON响应内容

requests中也有一个内置的json解码器,帮助我们处理json数据

>>> import requests
>>> r = requests.get("https://github.com/timeline.json")
>>> r.json()
{‘message‘: ‘Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.‘, ‘documentation_url‘: ‘https://developer.github.com/v3/activity/events/#list-public-events‘}
>>> r.status_code
410
>>> r.raise_for_status
<bound method Response.raise_for_status of <Response [410]>>

如果json数据解码失败,就会抛出一个ValueError: No JSON object could be decoded的异常

但是成功调用r.json()也不能说明响应成功,有的服务器会在失败的响应中包含一个json对象,如HTTP 500的错误细节,这种json也会被解码返回

所以要检查请求是否成功,可以使用r.status_code和r.raise_for_status来检查

  • 原始响应内容

requests获取来自服务器的原始套接字响应

>>> import requests
>>> r = requests.get("http://httpbin.org/get", stream=True)
>>> r.raw
<urllib3.response.HTTPResponse object at 0x000001B93F230518>
>>> r.raw.read(300)
b‘, \n    "Accept-Encoding": "gzip, deflate", \n    "Connection": "close", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.18.4"\n  }, \n  "origin": "110.90.39.155", \n  "url": "http://httpbin.org/get"\n}\n‘

要在初始请求中设置stream=True,然后用r.raw,可以使用r.raw.read()对内容进行读取

原文地址:https://www.cnblogs.com/sch01ar/p/8413446.html

时间: 2024-08-30 17:04:03

Python模块-requests(一)的相关文章

Python模块--Requests &lt;HTTP访问模块&gt;

urllib2是一个不错的HTTP访问库,但是API的设计太理性化,导致人类这个生物使用会遇到各种综合头疼. Requests诙谐又有趣的介绍如下: Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. Requests中文文档 一个简单的Requests模块示例 import requests response = reques

Python模块-requests(二)

会话对象 会话对象能够跨请求保持某些参数. 它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能. 所以如果向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升. 会话对象具有主要的 Requests API 的所有方法. 包含在会话中的数据都能直接使用 跨请求保持cookie: >>> import requests >>> s = request

python之requests模块

Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 发送GET请求 import urllib.request f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')

python之requests模块-cookie

cookie并不陌生,与session一样,能够让http请求前后保持状态.与session不同之处,在于cookie数据仅保存于客户端.requests也提供了相应到方法去处理cookie. 在python之requests模块-session中,我们知道了requests中的session对象能够在请求之间保持cookie,它极大地方便了我们去使用cookie.当我们想设置方法级别中的请求时,可以如下面示例一样操作. import requests s = requests.session(

python之requests模块-hook

requests提供了hook机制,让我们能够在请求得到响应之后去做一些自定义的操作,比如打印某些信息.修改响应内容等.具体用法见下面的例子: import requests # 钩子函数1 def print_url(r, *args, **kwargs): print("raw_url "+r.url) # 钩子函数2 def change_url(r, *args, **kwargs): r.url = 'http://change.url' print("change

python模块。

全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x01035A70>, '__cached__': None, '__name__': '__main__', '__spec__': None, '__builtins__'

python模块详解(一)

Python的模块在其它语言中通常称为库或类库,也就是lib.它是编程语言的第三级封装,第四级则是包,也就是模块的打包组合,而前两级分别是函数和类.封装的好处,自然不用多言,高内聚,松耦合,减少代码重复.同时,模块也是“轮子”的代表,大多数是前人已经实现并测试好的高效代码组合,它的存在使得我们不必重复“造轮子”,可以使用拿来主义.但是,个人认为一个合格的程序员,虽然不会去重复造轮子,但必须要具备造轮子的能力,至少你要看得懂他人造的轮子. python模块的种类 在python中,通常是这样的,许

python用requests和urllib2两种方式调用图灵机器人接口

最近从网上看见个有意思的图灵机器人,可以根据不同的信息智能回复,比如你发送一个"讲个笑话",它就会给你回复一个笑话,或者"北京天气"就可以回复天气情况,或者英文单词然后给你回复中文释义.官方文档中有php和java的调用方式,我就弄个python的吧. 注册获取API KEY 这一步很简单,直接注册一个账号就可以看到你的API KEY.这个KEY我们以后发送get请求的时候需要用到. Pythoh调用示例 掉用也比较简单,主要是模拟post 请求.然后解析 json

详解Python 采用 requests + Beautiful Soup 爬取房天下新楼盘推荐

最近一直在关注Python写爬虫相关的知识,尝试了采用requests + Beautiful Soup来爬取房天下(原搜房网)的推荐新楼盘. 不用不知道,一用发现有惊喜也有惊吓,本文就一同记录下惊喜和踩的一些乱码的坑. 首先,觉得Beautiful soup解析网页更加符合人类的常规思维,比使用正则表达式(python中的re库)更容易理解. 同时关于requests遇到了中文字符和特殊字符解码的问题.本文都将给于深入的解说. 软件环境 Python    : 3.6.0 PyCharm: C