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

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

本文解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。