Python使用Scrapy发送POST请求获取JSON响应报错1001如何解决
问题修复方案
错误原因分析
返回Invalid format错误主要由以下几个可修复的问题导致:
- 域名过滤规则配置错误,请求被Scrapy自动拦截
- 请求头缺失必要字段,接口无法识别合法请求来源
- 请求参数类型不匹配,部分字段传值格式不符合接口要求
- 本地代码存在语法错误,影响响应处理
具体修复步骤
- 修正
allowed_domains配置,添加请求接口的域名,避免Scrapy过滤合法请求 - 补充完整请求头,添加
User-Agent、Referer等浏览器标准字段 - 修正参数类型错误,将字符串类型的
page_size改为数字类型 - 修复响应存储的语法错误,正确处理bytes类型的响应内容
修正后完整代码
import scrapy import json class CodeSpider(scrapy.Spider): name = 'code' # 修正允许的域名列表 allowed_domains = ['rapaport.com', 'sarvadajewels.com'] def start_requests(self): form_data = { "request":{ "header":{ "raplink_access_key":"e7d7d61946804c579d02dab565371113", "domain":"www.sarvadajewels.com" }, "body":{ "search_type":"white", "shapes":["round"], "size_from":0.1, "size_to":100, "color_from":"D", "color_to":"M", "clarity_from":"IF", "clarity_to":"I1", "cut_from":"Excellent", "cut_to":"Poor", "polish_from":"Excellent", "polish_to":"Poor", "symmetry_from":"Excellent", "symmetry_to":"Poor", "labs":[], "fancy_colors":[], "price_total_from":0, "price_total_to":7428404930, "page_number":2, # 修正为数字类型 "page_size":60, "sort_by":"price", "sort_direction":"asc", "currency_code":"INR" } } } request_body = json.dumps(form_data) # 补充完整请求头 headers = { 'Content-Type': 'application/json; charset=UTF-8', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://www.sarvadajewels.com/' } yield scrapy.Request( 'https://technet.rapaport.com/HTTP/JSON/RetailFeed/GetDiamonds.aspx', method="POST", body=request_body, headers=headers, callback=self.parse ) def parse(self, response): # 修复语法错误,直接用response.text获取字符串格式的响应内容 with open('test.json', 'w', encoding='utf-8') as file: file.write(response.text)
额外排查提示
如果修改后依然返回格式错误,可按以下步骤验证:
- 打开目标网站控制台,复制浏览器实际发送的请求body和代码参数逐字段对比,确认参数名、参数类型完全一致
- 检查
raplink_access_key是否过期,该类密钥通常会伴随用户会话更新 - 确认是否需要携带Cookie,可在请求头中添加浏览器访问目标站后获取的Cookie值测试
内容的提问来源于stack exchange,提问作者Haris Ahmad
相关产品推荐
相关产品推荐

