如何通过Python requests.get()获取API指定数据?
解决方案
首先要明确:能否在请求阶段直接获取指定数据,完全取决于你调用的API是否提供查询过滤功能。这是避免全量加载后筛选的唯一可行方式。
情况1:API支持查询过滤参数(最优解)
如果API文档说明支持根据fruit字段过滤,通常会提供以下几种参数形式,你可以根据API要求构造请求:
示例1:支持多值fruit参数
很多API允许重复传递同一个参数来指定多个值,比如:
import requests url = "https://..." headers = {"Accept":"application/json","Content-Type":"application/json","Authorization":"..."} desired_fruits = ['apple', 'banana'] # requests会自动处理为 ?fruit=apple&fruit=banana params = {"fruit": desired_fruits} response = requests.get(url=url, headers=headers, params=params) filtered_data = response.json()
示例2:支持逗号分隔的参数
有些API要求用逗号拼接多个值,比如:
params = {"fruits": ",".join(desired_fruits)} response = requests.get(url=url, headers=headers, params=params) filtered_data = response.json()
示例3:支持结构化过滤语法(如OData)
部分API遵循标准过滤规范(比如OData的$filter),写法类似:
# 构造OData风格的过滤条件:fruit in ('apple','banana') filter_str = f"fruit in ({','.join([f"'{f}'" for f in desired_fruits])})" params = {"$filter": filter_str} response = requests.get(url=url, headers=headers, params=params) filtered_data = response.json()
情况2:API不支持任何过滤参数(无其他选择)
如果目标API没有提供过滤功能,那你只能先全量获取数据,再在本地筛选。这种情况下可以用列表推导式高效处理:
import requests url = "https://..." headers = {"Accept":"application/json","Content-Type":"application/json","Authorization":"..."} desired_fruits = ['apple', 'banana'] response = requests.get(url=url, headers=headers) full_data = response.json() # 本地筛选指定水果的记录 filtered_data = [item for item in full_data if item["fruit"] in desired_fruits]
关键提示
一定要查阅目标API的官方文档,确认它支持的查询参数格式——不同API的过滤规则差异极大,文档是最准确的参考依据。
内容的提问来源于stack exchange,提问作者amnesic
相关产品推荐
相关产品推荐

