Python爬虫中Request Payload与Form Data的区别及处理

雨后青山
雨后青山
发布时间:2026-10-13 | 2人浏览过
原创

本文解析Python爬虫中Request Payload与Form Data在Content-Type上的核心差异,指出Scrapy的FormRequest仅支持Form Data。针对Request Payload场景,提供通过Jsoup发送JSON字符串或Map参数的具体代码实现,并强调动态获取变化参数的重要性,帮助开发者解决POST请求参数传递问题。

Request Payload与Form Data的核心区别

在Web请求中,Request Payload与Form Data的主要区别体现在请求头部的Content-Type字段上。

Content-Type Form Data

Post表单请求

代码示例与Scrapy限制

代码示例


headers = {
 "Content-Type": "application/x-www-form-urlencoded"
}
requests.post(url, data=data, headers=headers)
Request Payload

传递json数据


headers = {
 "Content-Type": "application/json"
}
requests.post(url, data=json.dumps(data), headers=headers)

Scrapy的FormRequest组件仅支持Form Data形式的表单提交,其源码中Content-Type被固定为application/x-www-form-urlencoded。

Request Payload数据的传递方法

补充知识:如何传递Request PayLoad(请求负载)中的数据?

在进行爬虫开发时,分析网络请求可能会遇到如下类型的参数格式:

其底层原理尚不明确,待进一步研究后补充。此处仅记录实际应用方法。

用法:

根据上述图片,由于是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"}

或者:


 Map<String,String> m = new HashMap<String,String>();
 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);

或者:


Connection conn = Jsoup.connect("");
String requestJson = "{\"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爬虫中Request Payload与Form Data区别及处理方法的说明即为全部内容,希望能对读者有所帮助,也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表