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

如何用R抓取无ID的阿拉斯加选举数据表格并合并整理?

阿拉斯加2018大选州参众院结果抓取方案

针对你要抓取的页面,由于所有表格无ID,我们可以通过职位标题和候选人表格的结构关联性来匹配数据,最终生成每行对应一个职位候选人的记录。以下是具体步骤和代码:

1. 加载所需R包

先确保安装并加载网页抓取和数据处理的核心包:

# 未安装则先运行:install.packages(c("rvest", "dplyr", "purrr", "stringr"))
library(rvest)
library(dplyr)
library(purrr)
library(stringr)

2. 获取页面内容

读取目标网页的HTML内容:

url <- "https://www.elections.alaska.gov/results/18GENR/data/results18.htm"
page <- read_html(url)

3. 定位职位标题与对应候选人表格

观察页面结构可知:每个州参/众议院职位的标题在.tr类的行中,且该行紧接的下一个<table>就是该职位的候选人投票数据。我们先筛选出州参众院的职位,并绑定对应的HTML元素:

# 筛选州参议院、州众议院的职位标题及对应元素
office_info <- page %>% 
  html_elements(".tr") %>% 
  {tibble(
    office_name = html_text2(.) %>% str_trim(),
    element = .
  )} %>% 
  filter(str_detect(office_name, "State Senate|State House"))

4. 遍历提取每个职位的候选人与票数

遍历每个职位元素,提取对应的候选人表格数据,同时分离总票数:

# 提取每个职位的候选人信息和总票数
election_results <- office_info %>% 
  mutate(
    table_data = map(element, function(el) {
      # 获取当前职位对应的候选人表格
      candidate_table <- el %>% 
        html_next_sibling() %>% 
        html_table(header = FALSE, trim = TRUE)
      
      # 设置表头
      colnames(candidate_table) <- c("candidate", "votes")
      
      # 提取总票数(表格最后一行)
      total_votes <- candidate_table %>% 
        filter(str_detect(candidate, "^Total")) %>% 
        pull(votes) %>% 
        as.numeric()
      
      # 提取有效候选人数据(排除总票行)
      candidates <- candidate_table %>% 
        filter(!str_detect(candidate, "^Total")) %>% 
        mutate(votes = as.numeric(votes))
      
      # 返回候选人和总票数
      list(candidates = candidates, total_votes = total_votes)
    })
  ) %>% 
  # 展开数据,让每个候选人占一行
  unnest(table_data) %>% 
  unnest(candidates)

5. 整理最终数据集

最后整理成清晰的结构化数据,每行对应一个职位的候选人记录:

final_data <- election_results %>% 
  select(office_name, candidate, votes, total_votes) %>% 
  arrange(office_name)

# 查看结果示例
head(final_data)

关键说明

  • 用html_next_sibling()精准匹配职位标题对应的候选人表格,避免混淆不同职位的数据
  • 通过str_detect()过滤州参众院职位,排除其他无关竞选数据
  • 拆分总票数和候选人数据,确保每条记录包含完整的职位、候选人、得票和该职位总票数信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:03:14