对嵌套dict参数进行Scrapy编码

zbq4xfa0  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(90)

我想发送一个在嵌套指令中有参数的请求。

params = {
  'apiKey': 'XXXXXXXXXXXXXXXXXXX',
  'facetInclusion': 'All',
  'filter': '{"facetFilter": {"andClauses": [{"value": "WEBCAT_1_2_1", "type": "CategoryCode", "negate": false}], "orClauses": []}, "numericalFilter": [], "filteringFacetFilter": {"andClauses": []}}',
  'pageNumber': 0,
  'pageSize': 48,
  'productRepresentation': 'ExplicitRepresentation'....}

我想通过Scrapy请求发送它,但我得到422和错误代码,参数有问题

yield scrapy.Request(url=self.url, cb_kwargs=params, callback=self.parse, headers=self.headers)

但是,当我尝试使用requests发送相同的请求时,它运行正常

response = requests.get(url=self.url, headers=self.headers, params=params)

我尝试了所有不同形式的编码和转储的网址+参数,但我总是得到422形式的Scrapy。任何想法哪里可以是问题?非常感谢

pgky5nke

pgky5nke1#

cb_kwargs是一个字典,它将被传递给请求的回调。
body是请求的正文。

import json

yield scrapy.Request(url=self.url, body=json.dumps(params), callback=self.parse, headers=self.headers)

编辑

我误解了你的问题。这就是你想要的:

import urllib.parse
url_params = '?' + urllib.parse.urlencode(params)

yield scrapy.Request(url=self.url+urlparams, callback=self.parse, headers=self.headers)

其中url类似于www.url.com/products/search

相关问题