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

如何用R爬取USDA FoodData Central营养表?解决xml_missing问题

解决R语言爬取USDA营养表时的xml_missing错误

错误原因

你遇到的xml_missing错误是因为目标页面属于单页应用(SPA),营养表内容是通过JavaScript动态渲染生成的。rvest::read_html()只能抓取页面初始的静态HTML,此时#nutrients-table元素还未被加载,自然无法定位到对应节点。


解决方案

方案1:调用USDA FDC API(推荐,更稳定合规)

USDA官方提供了FoodData Central API,直接请求API比爬取动态页面更可靠,也符合网站使用规范。

  1. 先在USDA FDC开发者页面申请免费API密钥
  2. 使用以下代码获取营养数据:
library(httr)
library(jsonlite)
library(tidyverse)

# 替换为你的API密钥
api_key <- "你的API密钥"
fdc_id <- 2237774 # 对应目标页面的食物ID

# 构造API请求地址
api_url <- paste0("https://api.nal.usda.gov/fdc/v1/food/", fdc_id, "?api_key=", api_key)

# 发送请求并解析数据
response <- GET(api_url)
food_data <- fromJSON(content(response, as = "text"))

# 提取并整理营养信息为数据框
nutrients_df <- food_data$foodNutrients %>%
  select(nutrientName, nutrientNumber, unitName, value) %>%
  arrange(nutrientNumber)

print(nutrients_df)

方案2:用Playwright模拟浏览器加载动态内容

如果不想使用API,可以通过playwright包模拟浏览器完整加载页面,获取渲染后的HTML:

library(playwright)
library(rvest)
library(tidyverse)

# 初始化Playwright(首次运行会自动安装浏览器)
playwright_install()
pw <- playwright$launch()
browser <- pw$chromium$launch(headless = TRUE) # 设置为FALSE可查看浏览器窗口
page <- browser$new_page()

# 访问目标页面并等待营养表加载完成
url <- "https://fdc.nal.usda.gov/fdc-app.html#/food-details/2237774/nutrients"
page$goto(url)
page$wait_for_selector("#nutrients-table")

# 抓取渲染后的HTML并提取表格
html <- page$content()
nutrients_table <- read_html(html) %>%
  html_element("#nutrients-table") %>%
  html_table(header = TRUE)

print(nutrients_table)

# 关闭浏览器资源
browser$close()
pw$stop()

内容的提问来源于stack exchange,提问作者Daiil Jun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:05:24