Python爬虫:Request Payload和Form Data的简单区别说明
RequestPayload和FormData请求头上的参数差别在于:
Content-Type
FormData
Post表单请求
代码示例
headers={ "Content-Type":"application/x-www-form-urlencoded" } requests.post(url,data=data,headers=headers) RequestPayload
传递json数据
headers={ "Content-Type":"application/json" } requests.post(url,data=json.dumps(data),headers=headers)
Scrapy的FormRequest只支持FormData表单提交,源码固定为前者
补充知识:如何传递RequestPayLoad(请求负载)中的数据?
在做爬虫的时候,在分析请求的过程,遇到参数长这样的:
原理不太清楚,等搞明白再来补充。这里只记录如何应用这些数据。
用法:
根据上面的图片,由于是post请求,参数一般是以key-value的json字符串传递,或者将参数放入map传递。我们可以看到很多name,这个name就是key,下面的数据就是value,我们可以提取所有的key及value,组成一个json字符串或者map传递即可。
比如上面的数据可以提取如下:
{"view:id1:txtSearch":"","$$viewid":"!f9fpyhcv2t!","$$xspsubmitid":"view:_id1:_id2:pager1_Group_lnk_2","$$xspexecid":"view:_id1:_id2:parent","$$xspsubmitvalue":"","$$xspsubmitscroll":"0|0","view:_id1":"view:_id1"}
或者:
Mapm=newHashMap (); m.put("view:id1:txtSearch",""); m.put("$$viewid","!f9fpyhcv2t!"); m.put("$$xspsubmitid","view:_id1:_id2:pager1_Group_lnk_2"); m.put("$$xspexecid","view:_id1:_id2:parent"); m.put("$$xspsubmitvalue",""); m.put("$$xspsubmitscroll","0|0"); m.put("view:_id1","view:_id1");
由于我是用Jsoup来发请求的,所以我这样传参数即可:
Jsoup.connect("").data(m).cookies(null).method(Method.POST);
或者:
Connectionconn=Jsoup.connect(""); StringrequestJson="{\"view:id1:txtSearch\":\"\",\"$$viewid\":\"!f9fpyhcv2t!\",\"$$xspsubmitid\":\"view:_id1:_id2:pager1_Group_lnk_2\",\"$$xspexecid\":\"view:_id1:_id2:parent\",\"$$xspsubmitvalue\":\"\",\"$$xspsubmitscroll\":\"0|0\",\"view:_id1\":\"view:_id1\"}"; conn.requestBody(requestJson); conn.cookies(null).method(Method.POST); conn.execute();
具体参数具体情况填啦。
是不是超简单。
注意一点,请求负载中的value值不一定是固定值,若每次请求都会发生变化,那么就需要分析这个变化的值从哪里来,动态获取这个值,然后发送请求才能正确。
以上这篇Python爬虫:RequestPayload和FormData的简单区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。