使用 Python API 获取 USDA 营养数据:突破 50 条记录的限制(获取.营养.突破.记录.数据...)

wufei123 发布于 2025-08-29 阅读(5)

使用 python api 获取 usda 营养数据:突破 50 条记录的限制

本文介绍了如何使用 Python 访问 USDA(美国农业部)的营养数据 API,并解决默认情况下只能获取 50 条记录的限制。通过分析 API 文档,了解分页机制和参数设置,我们将学习如何迭代所有页面,获取完整的数据集,并将其用于后续的数据分析和处理。本文提供详细的代码示例,帮助读者快速上手。

USDA 营养数据 API 访问与数据分页处理

USDA 提供了丰富的营养数据 API,允许开发者获取各种食物的营养成分信息。然而,默认情况下,API 每次只返回有限数量的记录(通常为 50 条)。为了获取更完整的数据,我们需要了解 API 的分页机制,并通过迭代分页来获取所有数据。

了解 API 分页机制

在使用任何 API 之前,务必仔细阅读其官方文档。USDA 营养数据 API 的文档明确指出,API 支持分页功能,并提供了 pageSize 和 pageNumber 两个参数来控制每页返回的记录数和要访问的页码。

  • pageSize: 指定每页返回的记录数。默认值为 50,最大值可以设置为 200。
  • pageNumber: 指定要访问的页码。

通过调整这两个参数,我们可以控制每次请求返回的数据量和要访问的页面。

实现分页数据获取

以下代码展示了如何使用 Python 的 requests 库和 json 库来访问 USDA 营养数据 API,并实现分页数据获取:

import requests
import json
import pandas as pd

def call_API(foodName, apiKey):
    foods = []
    url = f"https://api.nal.usda.gov/fdc/v1/foods/search?api_key={apiKey}&query={foodName}&pageSize=200"
    with requests.Session() as req:
        try:
            r = req.get(url, timeout=10)
            r.raise_for_status()
        except requests.exceptions.HTTPError as err:
            print(f"Error: {err}")
            return None
        api_response = r.json()
        foods.extend(api_response["foods"])
        for page in range(2, api_response["totalPages"] + 1):
            try:
                r = req.get(url + f"&pageNumber={page}", timeout=10)
                r.raise_for_status()
            except requests.exceptions.HTTPError as err:
                print(f"Error: {err}")
                break
            api_response = r.json()
            foods.extend(api_response["foods"])
    return foods

food_items = call_API("raw", "YOUR_API_KEY")

# 示例:打印前5个食物的描述
if food_items:
    for i in range(min(5, len(food_items))):
        print(f"Food {i+1}: {food_items[i]['description']}")
else:
    print("No food items found.")

代码解释:

  1. call_API(foodName, apiKey) 函数:

    • 接受食物名称 foodName 和 API 密钥 apiKey 作为参数。
    • 初始化一个空列表 foods 用于存储所有食物数据。
    • 构建 API 请求 URL,设置 pageSize 为 200 以获取最大数量的记录。
    • 使用 requests.Session() 管理 HTTP 会话,提高效率。
    • 使用 try...except 块处理可能的 HTTP 错误。
    • 从 API 响应中提取 totalPages,确定需要迭代的页数。
    • 使用循环迭代所有页面,构建新的 API 请求 URL,并添加 pageNumber 参数。
    • 将每页获取的食物数据添加到 foods 列表中。
    • 返回包含所有食物数据的 foods 列表。
  2. 主程序:

    • 调用 call_API() 函数,获取所有食物数据。
    • 遍历 food_items 列表,打印每个食物的描述信息。
注意事项
  • API 密钥安全: 请务必妥善保管您的 API 密钥,不要将其泄露给他人。建议将 API 密钥存储在环境变量中,并在代码中读取环境变量。
  • 错误处理: 在实际应用中,需要完善错误处理机制,例如处理网络连接错误、API 响应格式错误等。
  • API 调用频率限制: 某些 API 可能会对调用频率进行限制。请注意遵守 API 的使用条款,避免过度调用。
  • 数据格式: USDA API 返回的数据是 JSON 格式。需要使用 json 库将其解析为 Python 对象,方便后续处理。
总结

通过本文的学习,您应该掌握了如何使用 Python 访问 USDA 营养数据 API,并解决默认情况下只能获取 50 条记录的限制。通过了解 API 的分页机制,并编写相应的代码,您可以获取更完整的数据集,为后续的数据分析和处理奠定基础。 请记住,在实际应用中,需要根据具体需求进行调整和优化,并注意 API 密钥安全、错误处理和 API 调用频率限制等问题。

以上就是使用 Python API 获取 USDA 营养数据:突破 50 条记录的限制的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  获取 营养 突破 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。