python爬蟲處理POST request payload請求
最近在采集某網站的時候發現是通過post請求來請求數據的,使用的數據格式是request payload,這個和之前看到過的常見的POST請求不同(Form data),這個時候在使用Form data的請求方式來提交時,就無法請求到真實數據了。
Http請求中Form data和request payload的區別:其實這兩種都是ajax中常見的兩種傳參數的形式
Form data
get請求的時候我們通常直接在url中以key=value的形式
post請求,表單參數都是在請求體中的,也就是將key=value從url中剝離了出來
request payload
要是使用的是原聲的ajax post請求的話,那么在chrome中的開發者模式下會看到單獨的request payload中的參互展示出來
在請求的content-Type中是application/json;charset=UTF=8,而在請求表單的參數在request payload中
兩者之間的區別
如果一個請求的content-Type被設置成application/x-www-form-urlencoded,那么這個Post請求會被認為是Http Post請求,那么請求的主體將會以一個標准的鍵值對和&的querystring形式出現,這種方式是HTML表單的默認設置,所以在過去這種方式更加常見
其他形式的POST請求,是放到request payload中(現在為了方便閱讀,使用了json進行序列化),所以請求的content-Type設置成了application/json;charset=UTF-8或者是不指定
python中使用requests模塊來請求post payload模塊
payloadData = { 'initPage': 'false', 'pageNum': '1', 'pageSize': '20', 'supplierCateId': "-1", 'queryType': "pro" } payloadData['pageNum'] = str(jb) # 請求頭設置 payloadHeader = { 'Host': 'a300010770.casmart.com.cn', 'Content-Type': 'application/json', } r = requests.post(postUrl, data=json.dumps(payloadData), headers=payloadHeader).text