*引子:HTTP协议对资源的操作
方法 | 内容 |
---|---|
GET | 请求获取url位置的资源 |
HEAD | 请求获取URL资源的头部信息 |
POST | 请求向URL位置的资源后新增内容 |
PUT | 请求向URL位置储存资源,覆盖原有资源 |
PATCH | 请求局部更新URL位置的资源,即部分改变 |
DELETE | 删除URL位置的资源 |
*关于patch与put的区别:
patch仅对改变的部分进行改写,put则需要把所有内容全部重写
如一组数据中有1,2,3字段,需要改写1,patch可直接修改,put则需要重新提交1,2,3
**requests.request(method, URL, kwargs)的功能
method:GET,HEAD,POST,PUT,PATCH delete,OPTIONS
与HTTP协议一一对应,OPTIONS为获取参数,很少使用
url:链接
**kwargs参数:
params:字典或字节序列,作为参数加到URL中
kv = {'k1': 'v1', 'k2': 'v2'}
r = requests.request("GET", "http://www.xxxxx.com", params=kv)
print(r.url)
输出结果为:http://www.xxxxx.com/?k1=v1&k2=v2
data:作为Requests的内容,字典与字符串均可
body = "主题内容"
r = requests.request("POST", "http://www.xxxxx.com", data=body)
json:作为Requests内容,json格式
k = {'k1': 'v1'}
r = requests.request("POST", "http://www.xxxxx.com", json=k)
headers:字典,HTTP定制头
hd = {'user-agent': 'Chrome/10'}
r = requests.request("POST", "http://www.xxxxx.com", headers=hd)
files:字典,传输文件
fs = {'file': open('data.xls', 'rb')}
r = requests.request("POST", "http://www.xxxxx.com", files=fs)
tiemout:设定超时时间(秒)
r = requests.request('GET', "http://www.xxxxx.com", timeout=10)
十秒内没返回则产生异常
proxies:字典,设定访问代理服务器,可增加登陆认证,隐藏用户源IP地址
pxs = {'http': 'http://user:',
'https': 'https://10.10.111.'}
r = requests.request("GET", "http://www.xxxxx.com", proxies=pxs)
cookies:字典或CookieJAR
auth:元组,支持HTTP认证
allow_redirects: True/False 是否允许重定向
stream:True/False 获取内容是否立刻下载
verify: True/False SSL证书认证开启与否
*默认均为True
cert: 本地SSL证书路径
requests其余六种主要函数
requests.get(URL, params=None, **kwargs)
requests.head(url, **kwargs)
requests.post(url, data=None, json = None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.delete(url, **kwargs)
均与method用法相同
requests.get()的用法
r = requests.get(url)
代码 | 功能 |
---|---|
r.status_code | 返回状态码,200则为成功 |
r.headers | 获取头部信息 |
r.text | 网络页面代码的字符串 |
r.encoding | headers中猜测的影响内容编码方式,不存在charset则默认为ISO-8859-1 |
rr.apparent_encoding | 内容中分析编码方式 |
r.content | HTTP响应内容的二进制形式 |
r.raise_for_status | 若返回对象的状态码不为200,则产生错误 |
通用代码框架:
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "https://www.xxxxx.com"
print(getHTMLText(url))
requesets库常见异常
异常 | 产生原因 |
---|---|
ConnectionError | 网络连接错误,如DNS查询失败、网络拒绝连接 |
HTTPError | HTTP协议错误异常 |
URLRequired | URL缺失异常 |
TooManyRedirects | 超过最大重定向错误 |
ConnectTimeout | 仅连接服务器超时 |
Timeout | 从发起URL请求到获取内容超时异常 |
*raise_for_status() 检测状态,不为200引发HTTPError