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

如何用rvest将巴尔的摩凶杀案受害者HTML数据转为R数据框?

解决rvest爬取凶杀案受害者信息并转为数据框的问题

核心思路

直接定位每个受害者数据行(.lfrow.odd和.lfrow.even),提取每行内对应字段的HTML元素文本,避免拆分整行文本的繁琐操作,结果更准确。

完整代码

library(rvest)
library(tibble)

# 读取目标页面
html <- read_html("https://homicides.news.baltimoresun.com/recent/")

# 选择所有包含受害者信息的行(排除表头行)
victim_rows <- html_elements(html, ".lfrow.odd, .lfrow.even")

# 提取各字段信息并构建数据框
victim_df <- tibble(
  date_time = html_element(victim_rows, ".lfdate") %>% html_text2(),
  victim_name = html_element(victim_rows, ".lfname") %>% html_text2(),
  address = html_element(victim_rows, ".lfaddress") %>% html_text2(),
  age = html_element(victim_rows, ".lfage") %>% html_text2(),
  gender = html_element(victim_rows, ".lfgender") %>% html_text2(),
  race = html_element(victim_rows, ".lfrace") %>% html_text2()
)

# 查看前几条数据验证
head(victim_df)

代码说明

  1. 选择目标行:用html_elements()同时选中.lfrow.odd和.lfrow.even类的元素,这些就是所有受害者数据行,自动跳过表头的.lfrow。
  2. 精准提取字段:每行内的信息都绑定了特定类名(日期对应.lfdate、姓名对应.lfname等),直接定位提取文本,无需处理换行、空值拆分等问题。
  3. 构建结构化数据:用tibble()创建数据框,格式更规整,也可以替换为base R的data.frame()。

补充处理(可选)

如果需要将页面中显示的—转为R标准空值NA,可以添加以下代码:

library(dplyr)
victim_df <- victim_df %>% 
  mutate(across(everything(), ~na_if(., "—")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:05:21