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

使用Rvest抓取选举页面时遭遇xml_missing的问题求助

解决Rvest抓取路易斯安那州选举日期的问题

问题根源

你遇到的{xml_missing} <NA>错误,核心原因有两个:

  1. 目标页面是服务器自动生成的静态目录索引页,链接嵌套在<table>结构中,直接调用html_element("a")无法定位到目标节点;
  2. 部分服务器会拦截无浏览器标识的请求,导致read_html获取到的内容不完整。

解决方案

1. 模拟浏览器请求获取完整页面

给请求添加User-Agent头,避免被服务器拦截:

library(rvest)
library(httr)

la_elections_url <- "https://voterportal.sos.la.gov/static/"

# 模拟Chrome浏览器请求头
request_headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
)

# 带请求头获取页面内容
la_elections_page <- read_html(GET(la_elections_url, request_headers))

2. 精准定位日期链接

静态目录页的日期链接都嵌套在表格的单元格中,用更精准的CSS选择器提取:

# 提取所有目录链接
all_links <- la_elections_page %>% 
  html_elements("table tr td a") %>% 
  html_attr("href")

# 过滤出YYYY-MM-DD格式的选举日期(排除上级目录"../")
election_dates <- all_links[grepl("^\\d{4}-\\d{2}-\\d{2}$", all_links)]

# 生成完整子页面URL
election_urls <- paste0(la_elections_url, election_dates)

3. 遍历页面下载并合并Excel表格

拿到有效URL后,遍历每个页面定位“Excel - Complete Results”链接,下载并合并数据:

library(dplyr)
library(readxl)
library(purrr)

# 遍历处理每个选举页面
compiled_results <- map_dfr(election_urls, function(url) {
  # 获取子页面内容
  sub_page <- read_html(GET(url, request_headers))
  
  # 定位Excel下载链接
  excel_href <- sub_page %>% 
    html_elements("a:contains('Excel - Complete Results')") %>% 
    html_attr("href") %>% 
    first()
  
  if (!is.na(excel_href)) {
    # 拼接完整下载链接并下载
    full_excel_url <- paste0(url, "/", excel_href)
    temp_file <- tempfile(fileext = ".xlsx")
    download.file(full_excel_url, temp_file, mode = "wb")
    
    # 读取Excel并添加选举日期标识
    read_excel(temp_file) %>% 
      mutate(election_date = basename(url))
  }
})

排查技巧

  • 如果仍无法获取链接:右键查看页面源码,确认<a>标签的父结构,调整CSS选择器(比如用"a[href^='20']"直接筛选20开头的日期链接);
  • 若页面需要Cookie:改用rvest::session()维持会话,先访问主页再请求目录页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:49