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

如何使用rvest从网站爬取并下载车站发车时刻表表格

德国铁路车站时刻表爬取解决方案

问题根源

该页面的时刻表表格为动态渲染生成,read_html()仅能获取静态HTML骨架,实际数据由JavaScript加载,因此直接调用无法提取到目标表格内容。

可行解决方法

方法1:用RSelenium模拟浏览器加载(推荐)

通过模拟真实浏览器运行JavaScript,获取完整渲染后的页面内容:

library(RSelenium)
library(rvest)
library(tidyverse)

# 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标页面
remDr$navigate("https://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?ld=4391&protocol=https:&rt=1&")

# 等待页面加载完成(可根据网络情况调整等待时长)
Sys.sleep(3)

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

# 定位并提取表格数据
schedule_table <- html %>%
  html_element("table.bhftafel") %>%
  html_table(header = TRUE)

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

# 查看提取结果
print(schedule_table)

方法2:抓取API接口直接获取数据

通过浏览器开发者工具找到加载时刻表的接口,直接请求获取结构化数据:

  1. 打开页面后按F12调出开发者工具,切换到「网络」标签
  2. 刷新页面,筛选XHR/Fetch类型请求,找到返回时刻表数据的接口
  3. 复制接口URL,用httr包直接请求解析:
library(httr)
library(jsonlite)

# 替换为实际找到的API接口地址
api_url <- "替换为真实API请求地址"
response <- GET(api_url)
raw_data <- fromJSON(content(response, "text"))

# 将JSON数据转换为数据框
schedule_df <- as.data.frame(raw_data)

注意事项

  • 使用RSelenium时,需保证浏览器驱动版本与本地浏览器版本匹配
  • 爬取时需遵守网站反爬规则,避免高频请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:19