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

R语言解析Google Page Speed API嵌套列表导出审计结果CSV

问题描述

处理Google Page Speed API返回的响应数据时,嵌套列表无法正常解析拆解,目标是仅提取页面速度审计结果并导出为CSV文件,用于对比分析客户网站的加载时长与性能表现。
原有实现直接将接口返回的顶层列表强转为数据框后,调用tidyr::unnest方法展开audits字段失败,无法得到包含first-contentful-paint等有实际参考价值指标的规整数据框。

原有错误实现代码:

library(httr)
library(tidyverse)
library(tidyr)

#URL to submit GET request to
url <- "https://www.googleapis.com/pagespeedonline/v5/runPagespeedurl=https://www.google.com/"


# GET request returned as list
raw_list <- url %>% 
httr::GET() %>% 
httr::content()


#turning the list into a dataframe 
df_pagespeed <- as.data.frame(do.call(rbind, raw_list))

#attempted unpack list in audit results with no luck
df_pagespeed <- tidyr::unnest(df_pagespeed, cols = audits)

# select only the audit results. 
df_pagespeed_final <- df_pagespeed[c(audits)]

#export to csv file
write.csv(df_pagespeed_final,"test-pagespeed.csv", row.names = FALSE)
问题原因
  • 接口请求URL格式错误:runPagespeed路径后缺少参数分隔符?,请求本身无法返回正确的结构化数据
  • 节点定位错误:审计结果audits字段存放在返回结构的lighthouseResult节点下,并非返回结果的根层级
  • 嵌套结构处理逻辑错误:audits下每个审计项为独立嵌套对象,包含id、标题、得分、数值、描述等多个异构字段,直接对顶层列表做rbind转数据框后,audits列不是规整的列表列,无法直接用unnest展开
修正后可运行代码
library(httr)
library(tidyverse)

# 修正请求URL,补充参数分隔符,可按需加strategy=mobile/desktop切换检测端
url <- "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.google.com/"

# 发起请求并解析返回结果
resp <- GET(url)
# 接口报错时直接终止,避免后续解析空数据
stop_for_status(resp)
raw_list <- content(resp)

# 定位到审计结果节点
audits_list <- pluck(raw_list, "lighthouseResult", "audits")

# 遍历提取每个审计项的核心字段,空值自动填充NA
df_pagespeed_final <- map_dfr(audits_list, function(item) {
  tibble(
    audit_id = item$id,
    audit_title = item$title,
    audit_score = item$score %||% NA,
    # 数值类指标默认单位为毫秒
    audit_value = item$numericValue %||% NA,
    audit_unit = item$numericUnit %||% NA,
    audit_description = item$description
  )
})

# 如需仅筛选核心加载性能指标,可放开下面这行注释
# core_metrics <- c("first-contentful-paint", "largest-contentful-paint",
#                   "speed-index", "interactive", "total-blocking-time",
#                   "cumulative-layout-shift")
# df_pagespeed_final <- filter(df_pagespeed_final, audit_id %in% core_metrics)

# 导出CSV
write.csv(df_pagespeed_final, "pagespeed-audit-result.csv", row.names = FALSE, fileEncoding = "UTF-8")
注意事项
  • 代码中%||%是rlang包提供的空值兜底运算符,随tidyverse加载,无需额外引入
  • 数值类性能指标的audit_value字段默认单位为毫秒,布局偏移指标CLS为无单位比值,可直接用于多站点横向对比
  • 批量检测多个站点时,只需要循环替换URL参数中的站点地址,给结果表新增站点标识列即可合并所有检测结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:21:33