Python请求多Tag参数问题:如何获取4个外卖分类数据
解决供应商API多Tag批量获取数据问题
我正在开发午餐模块,对接供应商网站数据时遇到了一个问题:供应商用tag替代分类,但API的tag参数只能指定单个值,无法一次性获取4个分类(Broodjes_frisdrank、Maaltijdsalades、Hartig、Soep to go)的数据,直接罗列多个tag值也无效。
以下是针对这个问题的几种可行解决方案:
方案1:传递多个同名tag参数(优先尝试)
很多API支持通过重复参数名传递多个值,比如tag=xxx&tag=xxx。在requests中,只需将params里的tag设置为列表,requests会自动生成多个tag参数:
import requests headers = { 'Accept': '*/*', 'Accept-Language': 'nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7', 'Connection': 'keep-alive', 'DNT': '1', 'Referer': 'https://webshop.mywebsiteblahblahblah.nl/', 'Sec-Fetch-Dest': 'script', 'Sec-Fetch-Mode': 'no-cors', 'Sec-Fetch-Site': 'cross-site', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', 'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', } # 将tag设为包含所有目标值的列表 params = { 'callback': 'jQuery111200009674179924930026_1732557740249', 'webshop': '9e04489556c3b92ff80935282b6fda4963fb6a66', 'session': '3hdilpramoi47rkjrq562q8fc7', 'tag': ['Broodjes_frisdrank', 'Maaltijdsalades', 'Hartig', 'Soep to go'], 'product': '', '_': '1732557740250', } response = requests.get('https://webshop.myfak.online/1.4//catalog.php', params=params, headers=headers) # 处理响应数据 print(response.text)
这种方式最终生成的URL会是:...&tag=Broodjes_frisdrank&tag=Maaltijdsalades&tag=Hartig&tag=Soep+to+go,符合HTTP多参数传递的标准格式,大部分API都会支持。
方案2:用分隔符拼接多个tag值
如果供应商API指定了多tag的分隔规则(比如逗号、分号、竖线),可以尝试将所有tag用指定符号拼接成单个字符串传递:
# 示例:用逗号分隔 params = { # ...其他参数不变 'tag': 'Broodjes_frisdrank,Maaltijdsalades,Hartig,Soep to go', } # 或者用竖线分隔 # 'tag': 'Broodjes_frisdrank|Maaltijdsalades|Hartig|Soep to go',
如果不确定分隔符,可以打开浏览器开发者工具,观察前端批量获取分类时的请求参数格式,或者查看供应商的API文档。
方案3:循环请求每个tag并合并结果
如果上述两种方式都无效,说明供应商API确实不支持批量传递tag,那就只能逐个请求每个tag,再将返回的数据合并:
import requests headers = { # ... headers不变 } base_params = { 'callback': 'jQuery111200009674179924930026_1732557740249', 'webshop': '9e04489556c3b92ff80935282b6fda4963fb6a66', 'session': '3hdilpramoi47rkjrq562q8fc7', 'product': '', '_': '1732557740250', } tags = ['Broodjes_frisdrank', 'Maaltijdsalades', 'Hartig', 'Soep to go'] all_data = [] for tag in tags: params = base_params.copy() params['tag'] = tag response = requests.get('https://webshop.myfak.online/1.4//catalog.php', params=params, headers=headers) # 处理JSONP格式响应:去掉callback包裹 data = response.text.split('(')[1].rstrip(');') all_data.append(data) # 根据实际数据结构调整合并方式 combined_data = ','.join(all_data) print(combined_data)
注意:如果响应是JSONP格式,需要先去除jQuery(...)的包裹,再解析成JSON数据,合并时要注意数据结构的兼容性。
内容的提问来源于stack exchange,提问作者Annaxx01
相关产品推荐
相关产品推荐

