如何用R将爬取的类JSON字符串转为JSON并生成结构化数据框
解决类JSON字符串转R数据框的方案
针对你爬取的德国献血机构页面的类JSON数据,我们可以通过字符串修正+标准JSON解析的方式转换成结构化数据框,步骤如下:
1. 加载依赖包
先确保安装并加载所需工具包:
install.packages(c("rvest", "stringr", "jsonlite", "dplyr")) library(rvest) library(stringr) library(jsonlite) library(dplyr)
2. 抓取页面并提取类JSON文本
首先爬取目标页面,定位包含机构数据的类JSON字符串(通常这类数据嵌在页面的<script>标签里,需根据实际页面结构调整选择器):
url <- "https://www.blutspenden.de/blutspendedienste/#" page <- read_html(url) # 提取包含机构数据的类JSON片段(示例:过滤含"locations"的脚本,需根据实际调整) raw_json <- page %>% html_nodes("script") %>% html_text() %>% str_subset("locations") %>% first() %>% str_remove("^.*window\\.locations\\s*=\\s*") %>% # 去掉变量赋值前缀 str_remove(";$") # 去掉末尾分号
3. 修正类JSON为标准JSON格式
类JSON通常存在单引号、无引号键、末尾多余逗号等问题,通过字符串处理修复:
# 替换单引号为双引号 clean_json <- str_replace_all(raw_json, "'", '"') # 为未加引号的键添加双引号(如`title:` → `"title":`) clean_json <- str_replace_all(clean_json, "(\\w+):", '"\\1":') # 移除对象/数组末尾的多余逗号(如`"key":"val",}` → `"key":"val"}`) clean_json <- str_replace_all(clean_json, ",\\s*([}\\]])", "\\1")
4. 解析为数据框并整理字段
将修正后的标准JSON解析成数据框,提取需要的字段:
# 解析JSON为数据框 locations_df <- fromJSON(clean_json) %>% as_tibble() # 提取目标字段(根据实际数据结构调整列名) final_df <- locations_df %>% select(title, street, number, zip, city, phone, email)
特殊情况处理:嵌套结构
如果机构数据存在嵌套对象(比如地址信息嵌套在address字段下),可以用unnest_wider展开:
final_df <- locations_df %>% select(title, address, phone, email) %>% unnest_wider(address) # 展开嵌套的地址字段,得到street、number等列
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

