You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:52:48