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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:57:24