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

无需Docker,R抓取动态网页表格遇阻,求简便解决方案

抓取佐治亚州众议院议员表格的最简方案

问题概述

需要抓取https://www.legis.ga.gov/members/house页面的议员表格,在以下环境尝试多种方法均失败:

  • Chrome版本:109.0.5414.119
  • 系统:macOS Ventura
  • R版本:4.2.0

尝试1:rvest无法获取动态生成的表格

使用rvest直接请求页面,但因表格是JavaScript动态渲染,原始HTML中无表格元素,报错如下:

library(rvest)
url <- 'https://www.legis.ga.gov/members/house'
page = read_html(url)
page %>% 
  html_element("table") %>%
  html_table()

# Error in View : no applicable method for 'html_table' applied to an object of class "xml_missing"

尝试2:RSelenium无法确定服务器状态

尝试用RSelenium启动Chrome驱动,但无法确认服务器状态,相关代码及警告:

library(RSelenium)
rD = rsDriver(browser="chrome", port=4234L, chromever="109.0.5414.74")

# Warning message:
# In rsDriver(browser = "chrome", port = 4234L, chromever = "109.0.5414.74") :
#   Could not determine server status.

library(wdman)
selServ <- wdman::selenium(verbose = FALSE)
selServ$log()

# $stderr
# [1] ""
# 
# $stdout
# [1] ""

尝试3:splashr安装失败

尝试安装splashr包时,因版本不兼容无法安装:

Warning in install.packages :
package ‘splashr’ is not available for this version of R

且不愿通过Docker部署splash,寻求无需额外软件的最简方案。

最简解决方案:直接调用数据API

该页面的议员数据实际通过后端API加载,无需处理动态渲染,直接请求API即可获取结构化数据:

实现代码

library(httr)
library(jsonlite)

# 请求议员数据API(sessionId需匹配当前页面使用的会话,当前为1022)
api_response <- GET("https://www.legis.ga.gov/api/members/house?sessionId=1022")

# 解析JSON响应为数据框
house_members <- as.data.frame(fromJSON(content(api_response, "text")))

# 查看前几行数据
head(house_members)

说明

  • 该API返回完整的议员结构化数据,包含姓名、选区、党派、联系方式等所有表格内的信息
  • 若后续sessionId更新,可通过浏览器开发者工具(F12 -> Network -> XHR)找到最新的API请求链接
  • 此方法无需依赖Selenium、Docker或其他动态渲染工具,仅需基础的HTTP请求和JSON解析包,是最简洁高效的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:45:50