如何用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)
代码说明
- 选择目标行:用
html_elements()同时选中.lfrow.odd和.lfrow.even类的元素,这些就是所有受害者数据行,自动跳过表头的.lfrow。 - 精准提取字段:每行内的信息都绑定了特定类名(日期对应
.lfdate、姓名对应.lfname等),直接定位提取文本,无需处理换行、空值拆分等问题。 - 构建结构化数据:用
tibble()创建数据框,格式更规整,也可以替换为base R的data.frame()。
补充处理(可选)
如果需要将页面中显示的—转为R标准空值NA,可以添加以下代码:
library(dplyr) victim_df <- victim_df %>% mutate(across(everything(), ~na_if(., "—")))
内容的提问来源于stack exchange,提问作者flemm0
相关产品推荐
相关产品推荐

