requests是Python中的一个HTTP客户端库,原本python内置了urllib
,urllib2
,urllib3
也能完成同样的功能,但API设计的都不是很好用,request则是一个相当简单易用的库,经常用于爬虫、HTTP接口调用等场景。下面主要以例子的形式介绍requests库的用法。
我们直接使用pip
安装即可。
pip3 install requests
下面我们以一系列例子的形式介绍如何使用requests库。
下面是发送GET请求HTML网页例子。
import requests
params = {'wd': '美女'}
r = requests.get("http://www.baidu.com/s", params=params)
r.encoding = "utf-8"
print(r.text)
requests.get()
会发起GET请求,返回值是一个响应(response)对象,params
为URL参数,是一个字典类型r.encoding
可以更改读取返回值时使用的文本编码r.text
读取响应的文本内容,这里为HTML格式的文本,读取后我们可以使用其它库进行进一步的解析同理,HTTP的POST,DELETE,PUT等请求方法的编写也是类似的。
图片等都属于二进制数据,下面例子我们请求了图片。
r = requests.get("https://www.baidu.com/img/bd_logo1.png")
fp = open("test.png", "wb")
fp.write(r.content)
fp.close()
代码中,我们请求了一个图片并保存到文件。
请求JSON数据通常用于HTTP接口调用。
r = requests.get("http://www.weather.com.cn/data/sk/101010100.html")
r.encoding="utf-8"
print(r.json())
上面例子查询了一个天气接口,我们直接以JSON形式读取了响应。
我们使用data
关键字参数进行表单数据的组织。
data = {"key1":"value1", "key2":"value2"}
r = requests.post(url, data=data)
直接使用json
关键字参数就好了。字典会自动转换成json字符串。
data = {"key1":"value1", "key2":"value2"}
r = requests.post(url, json=data)
上传文件使用files
关键字参数,但这里要注意,一定要以二进制形式打开文件。
fp = open("test.png", "rb")
files = {"file": fp}
r = requests.post(url, files=files)
r = requests.get("https://www.baidu.com")
print(r.status_code)
r.status_code
是响应对象的响应码。
请求时如果使用Cookie,只需设置下cookies
关键字参数,它是一个字典类型。
cookies = {"username": "test"}
r = requests.get(url, cookies=cookies)
此外,用r.cookies
可以读取服务器设置的cookie
,也是一个字典类型。
有些服务器会主动判断User-Agent
,根据终端设备的不同返回不同的内容,我们可以使用headers
关键字参数定制请求头。
headers = {"user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0"}
r = requests.get("http://www.baidu.com", headers=headers)
当然不止User-Agent
,HTTP请求头中具有的参数都可以传。
读取响应头可以使用r.headers
。
timeout
关键字参数可以设置超时时间,单位是秒。除了HEAD请求,Request会自动处理重定向。