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

如何将TRAC Immigration网页图表中的驱逐数据抓取到R中?

抓取TRAC Immigration网站的ICE驱逐月度数据到R

这个网站的图表数据并非静态嵌入HTML,而是通过JavaScript动态渲染,但数据实际藏在页面的JS变量里,无需浏览器模拟工具,直接提取JS数据即可,步骤如下:

步骤1:加载所需R包

先安装并加载必要的工具包:

# 首次运行时安装包
install.packages(c("rvest", "stringr", "jsonlite", "dplyr"))

# 加载包
library(rvest)
library(stringr)
library(jsonlite)
library(dplyr)

步骤2:抓取页面源码并提取JS数据

访问目标页面后,抓取HTML源码,定位存储图表数据的JS变量(该页面数据存在chart_data变量中):

# 抓取目标页面
url <- "https://trac.syr.edu/phptools/immigration/remove/"
page <- read_html(url)

# 提取页面所有JS脚本内容
scripts <- page %>% html_elements("script") %>% html_text()

# 筛选包含图表数据的脚本片段
chart_script <- scripts[str_detect(scripts, "chart_data")]

# 提取chart_data对应的JSON格式数据
data_json <- str_extract(chart_script, "chart_data = \\[.*?\\];") %>%
  str_remove("chart_data = ") %>%
  str_remove(";")

步骤3:解析JSON并转换为数据框

将提取到的JSON字符串转换为R可处理的数据框,此时就能获取所有城市的月度驱逐数据:

# 解析JSON数据
raw_data <- fromJSON(data_json)

# 整理为整洁的数据框
clean_data <- raw_data %>%
  mutate(
    # 拆分日期为年和月
    year = str_sub(date, 1, 4) %>% as.integer(),
    month = str_sub(date, 6, 7) %>% as.integer(),
    # 转换驱逐人数为数值型
    removals = as.integer(value)
  ) %>%
  select(city, state, year, month, removals)

步骤4:筛选德克萨斯州的数据

最后筛选出德克萨斯州(TX)的城市数据,得到目标数据集:

tx_removals <- clean_data %>%
  filter(state == "TX")

# 查看结果示例
head(tx_removals)

注意事项

  • 网站的JS变量名可能随更新变化,若后续代码失效,检查页面源码中的变量名,调整str_detect的关键词即可。
  • 数据中date字段格式为YYYY-MM,拆分年月时需确认格式一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:31:00