API自动化——requests
requests方法
delete、get、head、patch、post、put、request
get:re_1=requests.get(url,params,**kwargs)
post:re_2=requests.post(url,data,json,**kwargs)
request:re_3=requests.request(method,url,**kwargs)
响应信息
调用 requests 请求之后,会返回一个 response 对象
方法/属性 | 说明 |
---|---|
apparent_encoding | 编码方式 |
content | 返回响应的内容,以字节为单位 |
cookies | 返回cookies信息 |
elapsed | 返回timedelta对象,包含从改善请求到响应到达经过的时间 |
encoding | 解码 |
headers | 返回响应头 |
is_permanent_redirect | 判断响应是否是永久重定向的url |
is_redirect | 判断响应是否重定向 |
json() | 返回json对象(结果需要以json格式编写) |
reason | 响应状态的描述,如“Not Found”或“OK” |
request | 返回请求此响应的请求对象 |
status_code | 返回http状态码 |
text | 返回响应的内容,unicode类型数据 |
url | 返回响应的url |
例:
import requests
url='http://www.test.com'
datas={
"username":"admin",
"userpswd":"admin"
}
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
s=requests.session()
response=s.request(post,url,data=datas,headers=headers)
res=response.text
正则提取
re模块,提供Perl风格的正则表达式模式
-
re.match
从字符串的起始位置匹配一个模式,若匹配不成功,则返回None
语法:re.match(pattern,string,flags)
-
re.search
匹配整个字符串,直到找到一个匹配并返回匹配的第一个,否则返回None
语法:re.search(pattern,string,flags)
参数/方法 | 说明 |
---|---|
pattern | 要匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 标志位,用于控制匹配方式,如:区分大小写 |
start() | 匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0 |
end() | 匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0 |
span() | 返回匹配成功子串在字符串中位置 (start(group), end(group)) |
group(num=0) | 可一次输入多个组号,返回一个包含这些组所对应值的元组 |
groups() | 返回一个包含所有小组字符串的元组 |
import re
str_='Hello World Wide Web'
x=re.search(r'([a-z]+) ([a-z]+)',str_,re.I) # re.I忽略大小写
print(x.group(1))
print(x.group(2))
print(x.groups())
- findall
在字符串中找到匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表
import re
res=re.findall(r"(.*)",string)
print(res[0])
- finditer
和 findall 类似,匹配结果作为一个迭代器返回
import re
# 匹配结果作为一个迭代器返回
it=re.finditer(r".+",string)
for match in it:
print(match.group())
- compile函数
用于编译正则表达式,生成一个正则表达式( Pattern )对象
import re
pattern=re.compile(r'\d+')
# 从头部开始匹配,无结果,返回None
m=pattern.match('one12twothree34four')
# 从'1'开始匹配,至'w'结束
m=pattern.match('one12twothree34four',3,7)
m1=pattern.search('one12twothree34four',3,7)
m2=pattern.findall('one12twothree34four',3,7) # 返回list
print(m.group(0)) # 0可省略,返回12
# 匹配的子串在整个字符串中的起始位置(子串第一个字符的索引)
print(m.start(0)) # 返回 3
# 匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1)
print(m.end()) # 返回 5
print(m.span()) # 返回 (3,5)
print(m2[0]) # 返回12
JSON提取
安装:pip install jsonpath
JsonPath | 说明 |
---|---|
$.data.moive[*].date | 获取所有电影的日期 |
$..actor | 获取所有演员 |
$.data.* 或 $.data[*] | 获取data的所有元素 |
$.data..price | 获取所有的价格 |
$..movice[1] | 获取第2个电影的所有信息 |
$..movice[0:1] | 获取前2个电影的所有信息 |
$..movice[?(@.price>38)].name | 获取价格大于38的电影名 |
$..movice[?(@.actor=='成龙' && @.price<38)] | 获取演员为成龙且价格低于38的电影信息 |
$..movice[?(@.price in [18,25])] | 获取价格是18、25的电影信息 |
import jsonpath
# 绝对路径提取
value=jsonpath.jsonpath(json_data,"$.data[movice]")
# 相对路径提取
value_=jsonpath.jsonpath(json_data,"$..movice")