3 请求数据提取:json
3.1 json类型数据
json对象:{key:calue}
json数组:[1,2,3,4]
3.2 json模块
1) json.loads
- 把Json格式字符串解码转换成Python对象(json数组对应列表,json对象对应字典)
- 注意点:python中的None,在json中使用null来标识
2)json.dumps
- 实现python类型转换为json字符串,返回有个str对象把有个python对象编码转换成json字符串
- 注意:json.dumps()序列化时默认使用的ascii编码
- 添加参数ensure_ascii = False禁用ascii编码,按utf-8编码
url = 'http://httpbin.org/post'
#dumps将python对象转换为Json数据
data_json = json.dumps({'stock_no':'600585','price':'52.12'})
res = requests.post(url, data_json)
print(res)
print(res.text)
print(res.content)
print(res.json())
"""结果
<Response [200]>
{
"args": {},
"data": "{\"stock_no\": \"600585\", \"price\": \"52.12\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "40",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.32.3",
"X-Amzn-Trace-Id": "Root=1-66cb51d7-7c500fe92870796a2f2c7e8e"
},
"json": {
"price": "52.12",
"stock_no": "600585"
},
"origin": "172.104.189.197",
"url": "http://httpbin.org/post"
}
b'{\n "args": {}, \n "data": "{\\"stock_no\\": \\"600585\\", \\"price\\": \\"52.12\\"}", \n "files": {}, \n "form": {}, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Content-Length": "40", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.32.3", \n "X-Amzn-Trace-Id": "Root=1-66cb51d7-7c500fe92870796a2f2c7e8e"\n }, \n "json": {\n "price": "52.12", \n "stock_no": "600585"\n }, \n "origin": "172.104.189.197", \n "url": "http://httpbin.org/post"\n}\n'
{'args': {}, 'data': '{"stock_no": "600585", "price": "52.12"}', 'files': {}, 'form': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '40', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.32.3', 'X-Amzn-Trace-Id': 'Root=1-66cb527f-3f933ec779160df739e51cc2'}, 'json': {'price': '52.12', 'stock_no': '600585'}, 'origin': '172.104.189.197', 'url': 'http://httpbin.org/post'}
"""
3.3 jsonPath模块
JsonPath,用于是提取JSON数据中的指定数据
pip install jsonpath
JsonPath常用语法:
JSONPath | 描述 |
$ | 根节点 |
. or [] | 取子节点 |
.. | 子孙节点 |
[] | 如数组下标,根据内容选值等 |
使用方法:jsonpath.jsonpath()
参数1:数据对象
参数2:jsonpath表达式
import jsonpath
user ={"data":{"username":"xiaoyi","pwd":"123456"}}
#如果匹配不到数据,直接返回False
print(jsonpath.jsonpath(user, "$.username")) #False
#如果匹配不到数据,直接得到结果列表,两点代表子孙节点,子孙节点代表所有层级
print(jsonpath.jsonpath(user, "$..username"))#['xiaoyi']