如何用R爬取URL固定的NBA裁判分配历史日期表格?
爬取NBA裁判分配页面历史日期表格的R实现方案
这个页面的日期切换依赖JavaScript动态渲染内容,静态爬取工具(如直接用rvest发起GET请求)无法捕获JS加载的历史数据,以下提供两种可行方案:
方案一:用RSelenium模拟浏览器交互
通过模拟用户操作浏览器切换日期,获取动态加载的表格数据:
# 首次运行需安装依赖包 install.packages(c("RSelenium", "rvest", "dplyr")) # 加载工具包 library(RSelenium) library(rvest) library(dplyr) # 启动Chrome驱动(需确保Chrome浏览器与chromedriver版本匹配) driver <- rsDriver(browser = "chrome", port = 4567L, verbose = FALSE) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://official.nba.com/referee-assignments/") # 等待页面初始化加载 Sys.sleep(3) # 定位日期输入框并输入目标日期 date_input <- remDr$findElement(using = "css", value = "input[type='date']") date_input$clearElement() date_input$sendKeysToElement(list("2022-10-04")) # 模拟回车提交日期切换 date_input$sendKeysToElement(list(key = "enter")) # 等待表格加载完成 Sys.sleep(2) # 提取页面源码并解析表格 page_source <- remDr$getPageSource()[[1]] table_data <- read_html(page_source) %>% html_element("table") %>% html_table(fill = TRUE) # 查看结果 print(table_data) # 关闭浏览器会话 remDr$close() driver$server$stop()
方案二:直接调用后台API(高效推荐)
通过抓包分析页面网络请求,发现历史数据来自后台API,可直接构造请求获取:
# 首次运行需安装依赖包 install.packages(c("httr", "jsonlite", "dplyr")) # 加载工具包 library(httr) library(jsonlite) library(dplyr) # 定义需要爬取的日期列表 target_dates <- c("2022-10-04", "2022-10-05", "2022-10-06") # 循环请求每个日期的数据 all_data <- lapply(target_dates, function(date) { # 发送API请求 response <- GET( url = "https://official.nba.com/wp-json/nba-referee/v1/assignments", query = list(date = date) ) # 解析返回的JSON数据 json_data <- fromJSON(content(response, "text")) # 整理为数据框(若该日期无数据则返回空) if (!is.null(json_data$assignments)) { return(json_data$assignments %>% mutate(date = date)) } else { warning(paste("无数据:", date)) return(NULL) } }) # 合并所有日期的数据 combined_data <- bind_rows(all_data) # 查看结果 print(combined_data)
注意事项
- 使用RSelenium时,需确保浏览器与驱动版本一致,避免启动失败;
- API请求需注意频率,短时间内大量请求可能触发网站反爬限制;
- 若API结构随网站更新变化,需重新抓包分析新的请求接口。
内容的提问来源于stack exchange,提问作者DataProphets
相关产品推荐
相关产品推荐

