Scrapy传递含嵌套字典的请求参数返回422错误,求排查原因
问题原因与解决方法
核心错误
你在Scrapy请求里误用了cb_kwargs参数——这个参数是用来给回调函数parse传递内部参数的,不会被拼接到URL的查询参数中,这就导致目标API根本没收到你需要的apiKey、filter等关键参数,所以返回422参数错误。而requests的params参数是专门用来构造URL查询字符串的,这就是两者的本质区别。
正确的Scrapy请求写法
Scrapy的Request类没有直接对应requests的params参数,你需要手动将参数编码为URL查询字符串,再拼接到请求URL后:
- 导入URL编码工具:
from urllib.parse import urlencode
- 构造带查询参数的请求:
# 编码参数为查询字符串 query_string = urlencode(params) # 拼接完整URL full_url = f"{self.url}?{query_string}" # 发送请求 yield scrapy.Request(url=full_url, callback=self.parse, headers=self.headers)
额外注意事项
- 确保
params里的filter参数是正确转义后的JSON字符串(你当前示例里的"转义格式无需二次处理)。 urlencode会自动处理参数中的特殊字符编码,避免手动拼接出现格式错误。
内容的提问来源于stack exchange,提问作者PetrSevcik
相关产品推荐
相关产品推荐

