python requests
官方文档
一、介绍
Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。
⼀句话——Python实现的简单易⽤的HTTP库
二、基本用法
1. 实例
用 GET方法请求网页,得到一个 response 对象,并返回类型,状态码,响应体类型、内容、cookies。
import requests
r = requests.get('https://www.baidu.com/')
print(type(r)) # response类型
print(r.status_code) # 状态码
print(type(r.text)) # 相应体内容
print(r.text) # 内容
print(r.cookies) # cookies
print(type(r.headers), r.headers) # 响应头
print(type(r.url), r.url) # 请求地址
print(type(r.history), r.history) # 请求历史
其他请求类型的实现:
import requests
r = requests.post('http://httpbin.org/post')
r = requests.put('http://httpbin.org/put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/head')
r = requests.options('http://httpbin.org/options')
2. GET 方法(参数的使用)
-
附加额外信息(params)
import requests data = { 'name' : 'germey', 'age' : 22 } r = requests.get('http://httpbin.org/get', params=data) print(r.text) # json 格式的字符串 print(r.json()) # 将 json 格式的字符串 转字典
-
添加请求头
import requests headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' } # 加入请求头 r = requests.get('http://www.zhihu.com/explore', headers=headers)
-
抓取二进制文件(写入文件)
import requests import re r = requests.get('http://www.github.com/favicon.ico') print(r.text) # str 类型 (两种属性) print(r.content) # 字节类型 with open('favicon.ico', 'wb') as f: f.write(r.content)
三、高级用法
1.文件上传
import requests
import re
files = {
'file' : open('favicon.ico', 'rb')
}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
2. Cookies
获取 Cookies
import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
print(key + '=' + value)
可以用 cookies 维持登陆状态,先登录,再将 cookies 复制下来当作 headers
3. 会话维持
Session 对象会帮助我们维护一个会话。经常用于在同一个浏览器打开不同页面。
import requests
s = requests.Session()
r = s.get('http://httpbin.org/cookies/set/number/123456789')
print(r.text)
4. 代理设置
import requests
# http 代理
proxies = { # 代理地址只是举例子
"http" : "http://10.10.1.10:3128",
"https" : "http://10.10.1.10.1080",
}
# 需要认证的:
proxies = { # 代理地址只是举例子
"http" : "http://user:password@10.10.1.10:3128",
}
# socks 代理
proxies = { # 代理地址只是举例子
"http" : "socks5://user:password@host:port",
}
requests.get('http://www.taobao.com', proxies=proxies)
5. 超时设置
防止服务器不能及时响应,设置一个超时时间。要用到 timeout 参数,意义为发出请求到服务器返回响应的时间。
请求分为两个阶段:连接 读取,可以用元组分别设置时间
import requests
r = requests.get('http://www.taobao.com', timeout=(5.11, 30))