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

使用 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免费学习笔记(深入)”;

实现分页数据获取

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

import requestsimport jsonimport pandas as pddef 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 foodsfood_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.")

代码解释:

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 列表。

主程序:

调用 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 条记录的限制的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1369079.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 09:20:38
下一篇 2025年12月14日 09:20:49

相关推荐

  • Python利用USDA API获取完整营养数据:深度解析分页机制

    本教程旨在解决使用USDA食品数据中心(FDC)API时遇到的数据分页限制问题,特别是默认仅返回50条结果的情况。文章将详细解释API分页机制,并通过Python代码示例演示如何有效地利用pageSize和pageNumber参数,结合请求会话和错误处理,实现完整数据集的迭代获取与处理,最终导出至E…

    2025年12月14日
    000
  • 掌握USDA食品数据API分页获取完整营养信息教程

    本教程详细介绍了如何通过Python有效地从USDA食品数据API获取完整的营养事实数据。针对API默认返回结果受限(如50条)的问题,文章深入探讨了API分页机制,并提供了利用pageSize和pageNumber参数迭代获取所有数据项的解决方案。教程包含示例代码、错误处理和最佳实践,旨在帮助开发…

    2025年12月14日
    000
  • 深入理解与实现USDA FDC API数据分页获取

    本文旨在解决通过Python API获取USDA FDC营养数据时遇到的结果限制问题。我们将详细讲解API分页机制,介绍如何利用pageSize和pageNumber参数,并通过迭代请求实现完整数据集的检索,确保用户能够高效、准确地获取所有目标数据。 1. 理解API分页机制 在使用第三方API时,…

    2025年12月14日
    000
  • 计算图像像素平均亮度时出现不一致问题的解决方案

    本文旨在解决在使用OpenCV计算不同图像像素平均亮度时出现不一致的问题。通过分析问题代码,并结合实际案例,提供了一种更准确的计算图像平均亮度的方法,重点在于使用 cv2.imread 正确加载图像,并利用 numpy 提供的 mean() 函数进行计算,避免了潜在的类型转换和溢出问题。 在图像处理…

    2025年12月14日
    000
  • Python中字典怎么遍历 Python中字典遍历教程

    遍历字典默认是遍历键,可用.values()遍历值,.items()遍历键值对;遍历时修改字典会报错,应先复制键或用推导式生成新字典;大型字典推荐直接使用.keys()、.values()、.items()获取视图对象以节省内存;Python 3.7+字典有序,3.6及以前无序,需顺序时用Order…

    2025年12月14日
    000
  • python怎么读取csv文件_python数据处理基础教程

    首选pandas库读取CSV文件,因其功能强大且操作高效,适合数据分析;对于简单行操作,可使用内置csv模块,更加轻量灵活。 Python处理CSV文件,最直接也最常用的方式就是借助`pandas`库。它提供了一套高效且功能强大的工具集,能让你轻松地读取、操作和分析CSV数据。当然,如果只是简单的行…

    2025年12月14日
    000
  • 多算法聚类结果的合并策略与SQL实现:基于连通分量的传递闭包方法

    本文探讨了如何合并来自不同聚类算法、但作用于同一数据集的聚类结果。当不同算法的集群通过共享相同数据项而存在重叠时,需要将这些重叠集群进行传递性合并。文章将阐述此问题本质上是图论中的连通分量发现,并提供基于SQL和Python/PySpark的解决方案,重点讲解其逻辑、实现步骤及注意事项,以生成统一的…

    2025年12月14日
    000
  • Django模型中高效动态获取关联字段值并构建字典

    本教程详细阐述了在Django中如何高效地从主模型动态获取所有通过ForeignKey关联的子模型的特定字段值,并将其组织成一个结构化字典。通过利用ReverseManyToOneDescriptor进行模型内省,并结合在关联模型中自定义dump方法,我们能够自动化数据聚合过程,避免繁琐的手动查询,…

    2025年12月14日
    000
  • Django模型关联数据动态提取与字典化:构建通用数据导出方法

    本教程旨在解决Django中从主模型动态高效地获取所有反向关联模型数据并将其组织成字典的挑战。通过利用模型自省机制识别反向外键,并结合关联模型上定义的统一数据提取方法,我们能够自动化地收集和格式化相关数据,避免手动编写大量重复查询代码,从而提高代码的简洁性和可维护性。 在django应用开发中,当一…

    2025年12月14日
    000
  • 高效获取UniProt数据库条目ID:应对动态加载与API应用实践

    本教程旨在解决从UniProt网站抓取条目ID时,因页面内容动态加载导致传统BeautifulSoup解析失败的问题。我们将深入分析失败原因,并提供一个更稳定、高效的解决方案:利用UniProt官方REST API直接获取所需数据,避免复杂的网页解析,确保数据提取的准确性和可靠性。 网页动态加载内容…

    2025年12月14日
    000
  • 高效获取Django关联模型数据字典:元编程与自定义方法

    本教程旨在解决如何高效地从Django父模型实例中,动态收集其所有关联模型(通过ForeignKey反向引用)的特定字段值,并将其整合到一个简洁的字典中。我们将通过利用Python的元编程技术来识别反向外键关系,并结合关联模型上的自定义方法来提取所需数据,从而避免手动逐一查询的繁琐与低效。 引言:高…

    2025年12月14日
    000
  • UniProt动态内容抓取:利用REST API高效获取生物序列条目ID教程

    本教程旨在解决从UniProt数据库动态加载页面抓取条目ID的常见问题。当传统的requests和BeautifulSoup组合无法获取JavaScript渲染的数据时,文章详细介绍了如何利用UniProt官方提供的REST API进行高效、可靠的数据提取。通过实例代码,演示了查询特定条目和模拟下载…

    2025年12月14日
    000
  • Django模型反向关联数据高效字典化教程

    本教程详细阐述了如何在Django中高效地将主模型的所有反向关联模型数据聚合到一个字典中。通过利用ReverseManyToOneDescriptor动态识别反向外键关系,并结合相关模型自定义的dump方法,我们能够自动化地提取指定字段的值,从而避免手动查询每个关联模型,极大地提升了数据获取的灵活性…

    2025年12月14日
    000
  • Python中复杂数据结构属性变更的级联更新机制

    本文探讨了在Python中,当复杂嵌套对象内部属性发生变化时,如何实现上层派生数据结构的自动更新。通过引入分层更新策略,结合@property装饰器和显式更新方法,构建了一个能够响应内部对象状态变化的级联更新机制,避免了手动调用更新方法的繁琐,提升了代码的健壮性和可维护性。 理解问题:为何属性变更未…

    2025年12月14日
    100
  • Python面向对象设计:管理嵌套对象属性变化与自动更新机制

    本文探讨了在Python中处理复杂嵌套对象结构时,如何确保当内部对象属性发生变化时,外部聚合对象能够自动感知并更新其状态。通过分析一个DataFrame构建器的实际案例,我们将展示如何利用显式更新方法和分层设计,实现高效、可维护的数据同步机制,避免手动触发更新的繁琐。 问题背景:嵌套对象属性变化的挑…

    2025年12月14日
    000
  • 图像平均亮度计算不一致性解析与Numpy优化实践

    本文旨在解决图像处理中计算平均亮度时出现的数值不一致问题。通过分析原始代码中手动计算平均值及处理零像素的策略,我们发现利用Numpy数组内置的mean()方法能显著简化代码、提高计算准确性和效率。本教程将详细介绍如何采用更简洁、可靠的方式计算图像的平均亮度,并提供优化后的代码示例及最佳实践建议。 图…

    2025年12月14日
    000
  • Python函数设计:避免循环引用与提升模块化

    本文探讨了Python函数设计中常见的循环引用问题,尤其是在GUI应用中计算总价、税费和服务费的场景。通过分析一个RecursionError案例,我们展示了如何通过参数传递和函数职责分离来重构代码,有效避免无限递归,提升代码的可读性、可维护性和模块化程度。 Python函数设计与循环引用问题解析 …

    2025年12月14日
    000
  • Python如何读取csv文件_Python读取csv文件方法总结

    使用csv模块和pandas是Python读取CSV文件最常用的方法;csv适合基础逐行处理,pandas则擅长高效的数据分析与大规模操作,结合二者可应对绝大多数场景。 Python读取CSV文件,最常用且高效的方式莫过于使用内置的 csv 模块,它提供了基础而强大的解析能力,尤其适合处理结构相对简…

    2025年12月14日
    000
  • python怎么字符串拼接_python多种字符串连接方式

    Python字符串拼接应根据场景选择方法:f-string适用于变量嵌入和格式化,.join()适合高效连接大量字符串,避免在循环中使用+操作符以防止性能问题。 Python中拼接字符串的方式远不止一种,从最直观的 + 操作符,到高效的 .join() 方法,再到现代且强大的f-string,以及传…

    2025年12月14日
    000
  • 解决Python递归深度限制:函数调用栈溢出问题

    本文针对Python中常见的RecursionError: maximum recursion depth exceeded错误,提供了一种清晰的解决方案。该错误通常发生在函数内部调用自身,导致无限循环并最终耗尽调用栈空间。通过修改代码结构,避免函数间的循环调用,并正确传递参数,可以有效解决该问题,…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信