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
相关产品推荐
相关产品推荐

