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

首次R网页爬取工作项目遇阻:寻求RSelenium替代简便方案

解决Utah法案列表网页爬取问题

问题根源

你判断的没错,这个页面的法案数据是JavaScript动态加载的,read_html()只能获取初始静态HTML,无法拿到JS渲染后的目标内容,所以看不到你需要的元素。

最优简便方案:直接调用后端API

通过检查页面网络请求,发现该页面的法案数据来自一个公开API,直接请求API比浏览器渲染简单高效:

1. 安装并加载必要包

install.packages(c("httr", "jsonlite", "dplyr"))
library(httr)
library(jsonlite)
library(dplyr)

2. 请求API并解析数据

# 调用API获取原始数据
response <- GET("https://le.utah.gov/DynaBill/api/BillList?session=2024GS")
bill_raw_data <- fromJSON(content(response, "text"))

3. 提取整理目标字段

API返回的JSON包含所有你需要的信息,直接筛选整理成数据框:

bill_df <- bill_raw_data %>%
  select(
    bill_number = billName,
    short_title = shortTitle,
    sponsor = sponsorName,
    last_updated = lastUpdate,
    link = billLink
  ) %>%
  mutate(link = paste0("https://le.utah.gov", link)) # 补全完整URL路径

运行head(bill_df)即可查看提取好的前几条数据,完全匹配你的需求。

备选方案:用polite包模拟浏览器请求(API失效时用)

如果后续API无法访问,可使用polite包模拟浏览器请求头,触发页面JS加载:

install.packages("polite")
library(polite)
library(rvest)

# 创建会话模拟浏览器
session <- bow(
  url = "https://le.utah.gov/DynaBill/BillList?session=2024GS",
  user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
)

# 获取渲染后的页面
page <- scrape(session)

# 提取各字段
bill_numbers <- page %>% html_elements(".nlink") %>% html_text()
bill_links <- page %>% html_elements(".nlink") %>% html_attr("href") %>% paste0("https://le.utah.gov", .)
short_titles <- page %>% html_elements(".shortTitle") %>% html_text()
sponsors <- page %>% html_elements(".sponsorName") %>% html_text()
last_updates <- page %>% html_elements(".lastUpdate") %>% html_text()

# 整理成数据框
bill_df_alt <- data.frame(
  bill_number = bill_numbers,
  short_title = short_titles,
  sponsor = sponsors,
  last_updated = last_updates,
  link = bill_links
)

最后考虑RSelenium(仅当以上方法失效时)

如果页面结构大幅变化,再用RSelenium启动浏览器渲染页面:

install.packages("RSelenium")
library(RSelenium)
library(rvest)

# 启动Chrome驱动(需提前安装ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 打开目标页面并等待加载
remDr$navigate("https://le.utah.gov/DynaBill/BillList?session=2024GS")
Sys.sleep(3)

# 获取渲染后的页面源码
page_source <- remDr$getPageSource()[[1]]
page <- read_html(page_source)

# 后续提取步骤同备选方案

# 关闭浏览器和驱动
remDr$close()
driver$server$stop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:27