【Python Requests开发文档 2.10】快速上手
下面我们就开始学习Requests简单优雅的API吧!
首先,请先确保自己Requests已经安装好了。
我们将通过下面的例子来学习Requests:
- 发起请求
- Get请求给url添加参数
- Response的内容
- 二进制响应
发起请求
打开控制台,输入:
>>> import requests
引入requests模块
下面来获取一个网页,作为示例,我们来获取一下百度的首页:
>>> r = requests.get("https://www.baidu.com")
好了,这个 r 就是我们获取的Response对象,从r中能获取所有我们需要的信息。
Requests API的设计理念之一是所有的HTTP的请求都能在api中明显的体现。比如,我们可以用下面的api发起HTTP Post连接:
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
方便极了!
好了,下面来其他的HTTP方法吧:PUT、DELETE、HEAD、OPTIONS,它们也一样简单:
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
Get请求给url添加参数
大部分时候我们发起Get请求的时候需要给url添加参数,其它库很多都需要手动地添加查询参数,比如:
http://httpbin.org/get?key=val
Requests提供了一个功能:可以将参数放在字典里,然后由Requests自动组合成一个url去发起Get请求
payload={key1:val1, key2=val2}
r=requests.get('http://httpbin.org/get', params=payload)
print(r.url)
如果value为None,那对应的key就不会被添加到url里;另外,还可以添加value还可以是数组。
payload={key1:val1, key2=[val2,val3,val4]}
r=requests.get('http://httpbin.org/get', params=payload)
print(r.url)
Response的内容
下面我们来看一下Response中的内容:
import requests
r=requests.get("http://www.zgljl2012.com")
print(r.text)
可以看到输出了首页的整个内容。
requests可以自动地对服务器来的内容进行编码。做到了对绝大部分的Unicode字符的无缝支持。编码会在你调用r.text的时候起效。编码可以获取也可以修改:
>>> r.encoding
'utf-8'
>>> r.encoding='gbk'
除了r.text之外,还有一个变量可以查看内容:
>>> r.content
但r.content输出的是未经Unicode编码的。如果想要您的爬虫支持任何特殊情形的话,可以先用r.content取得编码,然后再用r.encoding设置编码,最后用r.text输出,当然,前提是您所访问的内容里有指定编码,比如html和xml。
二进制响应内容
对于gzip和defalte压缩的页面能自动解码。
示例,在网络上请求一张图片,可以使用如下方式:
>>> from PIL import Image
>>> from io import StringIO
>>> i = Image.open(StringIO(r.content))
JSON响应内容
Requests内置了JSON解码器,以便开发者处理JSON:
import requests
r = requests.get("http://example.json")
print(r.json())
如果解码失败,将抛出异常。当没有内容、或是返回的数据不符合JSON规范,都将抛出ValueError异常。另外,有些服务器在返回500错误的时候,返回的也是JSON数据,但这个时候数据就是错的,所以,建议先用r.raise_for_status()或者r.status_code检查一下返回是不是正常的数据(200)。