電子請柬網(wǎng)站開發(fā)app推廣實(shí)名認(rèn)證接單平臺(tái)
目錄
1. 正則表達(dá)式:使用re庫(需安裝-pip install re),只能提取字符串的數(shù)據(jù)。
1.1 re.seach:提取一個(gè)值,得到的是一個(gè)對象,通過下標(biāo)group(1)取值,如果沒有匹配到值則返回None
1.2 re.findall:提取多個(gè)值,得到的是一個(gè)列表,通過下標(biāo)【0】取值,如果沒有匹配到值則返回一個(gè)空列表
2. Jsonpath表達(dá)式:jsonpath
2.1 jsonpath.jsonpath() 提取多個(gè)值,得到的是一個(gè)列表,通過下標(biāo)【0】取值,如果沒有匹配到值則返回None
2.2 語法規(guī)則
響應(yīng)數(shù)據(jù)示例
{"code": 200,"messages": "ok","data": [{"name": "宋瑤","time": "2020-09-30 18:58:33","relation": {"mobile": "15811111111","CardType": "身份證"}}]
}
1. 正則表達(dá)式:使用re庫(需安裝-pip install re),只能提取字符串的數(shù)據(jù)。
1.1 re.seach:提取一個(gè)值,得到的是一個(gè)對象,通過下標(biāo)group(1)取值,如果沒有匹配到值則返回None
url = 'http://192.168.1.1:8088/list'
data = {"name":"張三","age":18}
res = requests.get(url=url, data=data)print(res.text)
search_value = re.search('name="csrf_token" value="(.*?)"', res.text)
print("\n"+search_value.group(1))
正常提取到的情況
.*??表示匹配任意字符到下一個(gè)符合條件的字符
.group(1) 列出第一個(gè)括號匹配的部分,適用于有多個(gè)括號的情況
?.group(2) 則可以將第二個(gè)匹配的部分提取出來
無法提取到的情況,若使用search_value.group(1)則會(huì)報(bào)錯(cuò)AttributeError,因?yàn)椴]有提取到任何數(shù)據(jù)
?
1.2 re.findall:提取多個(gè)值,得到的是一個(gè)列表,通過下標(biāo)【0】取值,如果沒有匹配到值則返回一個(gè)空列表
url = 'http://192.168.1.1:8088/list'
data = {"name":"張三","age":18}
res = requests.get(url=url, data=data)print(res.text)findall_value = re.findall('name="csrf_token" value="(.*?)"', res.text)
print(findall_value[0])
正常提取到情況,提取出角標(biāo)為0的值
?使用角標(biāo)的形式提取,若角標(biāo)值大于了可匹配到的數(shù)據(jù)總數(shù),則會(huì)出現(xiàn)角標(biāo)越界的情況IndexError
?獲取不到時(shí)返回空列表
2. Jsonpath表達(dá)式:jsonpath
2.1 jsonpath.jsonpath() 提取多個(gè)值,得到的是一個(gè)列表,通過下標(biāo)【0】取值,如果沒有匹配到值則返回None
import requests
import jsonurl = "http://test/project/list"payload = json.dumps({"pageNo": 0,"pageSize": 5,"queryDto": {"projectName": "測試"}
})
headers = {'authInfo': '%7B%22user%22','Content-Type': 'application/json'
}response = requests.post(url, headers=headers, data=payload)
print(response.text)
打印結(jié)果為:
{"code": "0","action": "/project/list","msg": "succeeded","data": {"pageNo": 0,"pageSize": 5,"totalRecords": 1,"data": [{"id": "1310935793613242370","projectName": "測試"}]},"timestamp": "2024-01-03 21:33:38","ok": true
}
2.2 語法規(guī)則
(1) $ 根節(jié)點(diǎn)
(2) $.取子節(jié)點(diǎn)
j = jsonpath.jsonpath(response.json(),'$.code')
print(j)
?
?(3) 取列表中的值:$.上級[角標(biāo)] .key
j = jsonpath.jsonpath(response.json(),'$.data.data[0].id')
print(j)
表示提取第一層級為data,下一級也是data的列表中的第一組數(shù)據(jù)中的id的value值。這里可以通過id反寫層級
?(4) $..遞歸取值:會(huì)把所有data的value都取出來,以列表形式顯示
j = jsonpath.jsonpath(response.json(),'$..data')
print(j)
結(jié)果:
?