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

R语言解析网页JSON内容提取title7字段值的实现方法

问题原因

你调用html_nodes("title4")返回空结果,是因为title4是JSON结构内的字段名,不是HTML标签,rvest的节点选择器只能匹配HTML DOM元素,自然无法定位到JSON内部的键。你不需要用正则硬匹配数值,直接提取p标签内的纯文本后用JSON解析工具处理,容错率远高于正则方案。

实现步骤

首先加载JSON解析包jsonlite(如果未安装先运行install.packages("jsonlite")),基于你已经读入的page对象按如下流程处理即可:

  • 提取p标签内包裹的原始JSON字符串
  • 将JSON字符串解析为R原生列表对象
  • 批量提取每个条目下title4.title7存储的两个数值,整理为目标结构的数据框
完整代码
# 加载JSON处理包
library(jsonlite)

# 1. 提取<p>标签内的原始JSON文本
raw_json_text <- page %>%
  html_element("p") %>%
  html_text()

# 2. 解析JSON为R列表结构
parsed_data <- fromJSON(raw_json_text, simplifyVector = FALSE)

# 3. 提取目标字段,生成结构化结果
final_result <- data.frame(
  id = seq_along(parsed_data),
  title7_1 = vapply(parsed_data, function(item) item$title4$title7[[1]], FUN.VALUE = numeric(1)),
  title7_2 = vapply(parsed_data, function(item) item$title4$title7[[2]], FUN.VALUE = numeric(1))
)
容错适配

如果爬取过程中碰到个别条目缺失title4或title7字段,把提取逻辑替换为带异常捕获的版本即可,避免代码中断:

final_result <- data.frame(
  id = seq_along(parsed_data),
  title7_1 = vapply(parsed_data, function(item) {
    tryCatch(item$title4$title7[[1]], error = function(e) NA_real_)
  }, FUN.VALUE = numeric(1)),
  title7_2 = vapply(parsed_data, function(item) {
    tryCatch(item$title4$title7[[2]], error = function(e) NA_real_)
  }, FUN.VALUE = numeric(1))
)
结果验证

运行后直接打印final_result就能得到你需要的三列结构,数值类型和示例输出完全一致:

> head(final_result)
  id      title7_1    title7_2
1  1   -17662.3456   987621.77
...
n  n -1621626123.23 652238322.12

注意:不要用正则直接匹配数值,一旦JSON内出现其他格式的数字内容很容易匹配错误,原生JSON解析是这类场景的最优方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:54:22