Python公开课 - Requests基本功能
前言
Python自带的库也可以进行网络访问,但是有很多不方便的地方,相比而言requests在这个方面非常强大,有了它,Cookies、登录验证、代理设置等操作都不是事儿。
发送请求
见示例:
>>> import requests
>>> r = requests.get('http://www.xtuz.net/')
>>> r = requests.post('http://www.xtuz.net/', data = {'key':'value'})
>>> r = requests.put('http://www.xtuz.net/', data = {'key':'value'})
>>> r = requests.delete('http://www.xtuz.net/')
>>> r = requests.head('http://www.xtuz.net/')
>>> r = requests.options('http://www.xtuz.net/')
可见,http的请求,requests已经做了非常友好的封装。
GET请求传递URL参数
在GET请求中,可以通过URL的查询字符串(query string)来传递数据。如果是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。如果你想传递 key1=value1 和 key2=value2 到 http://www.xtuz.net ,那么在requests中可以使用如下代码
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://www.xtuz.net", params=payload)
自定义请求头
如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。
>>> url = 'http://www.xtuz.net'
>>> headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get(url, headers=headers)
响应状态码
我们可以通过返回的status_code来获取服务端的响应状态码
>>> r = requests.get('http://www.xtuz.net')
>>> r.status_code
200
响应头
我们可以查看以一个 Python 字典形式展示的服务器响应头:
>>> r.headers
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '"e1ca502697e5c9317743dc078f67693f"',
'content-type': 'application/json'
}
服务端响应文本内容
Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。但是你也可以使用 r.encoding 属性来改变它。
>>> import requests
>>> r = requests.get('http://www.xtuz.net')
>>> r.text
>>> r.encoding
输出:
'utf-8'
服务端响应二进制内容
对于服务端返回二进制内容,可以使用下面的方式来获取数据
>>> r.content
requests 会自动为你解码 gzip 和 deflate 传输编码的响应数据。
服务端响应JSON内容
requests 中内置了JSON解码器,助你处理JSON数据
>>> import requests
>>> r = requests.get('http://www.xtuz.net')
>>> r.json()
服务端原始响应内容
在某些情况下,可能需要处理原始的数据,当然在爬虫中可不常见,但是如果你有这样的需求,那么可以这样处理
>>> r = requests.get('http://www.xtuz.net', stream=True)
>>> r.raw
相关阅读
相关主题: