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

使用R语言rvest爬取网页表格仅返回空表格问题求助

问题原因

目标页面的核心趋势表格是通过JavaScript动态渲染生成的,rvest的read_html()只能抓取页面初始加载的静态HTML,没法执行页面里的JS代码,所以拿不到真正的趋势数据。你现在输出的只是页面顶部的静态标题表格,不是要找的目标表格。

解决方案

方法1:用RSelenium模拟浏览器加载动态内容

RSelenium能模拟真实浏览器打开页面,等JS渲染完成后再抓取内容,示例代码如下:

library(RSelenium)
library(rvest)
library(dplyr)

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

# 访问目标页面
remDr$navigate("https://archive.twitter-trending.com/united-states/16-11-2023")

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

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

# 提取并打印所有表格
my_tables <- html_nodes(tt, "table")
for (table in my_tables) {
  print(table %>% html_table())
}

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

方法2:用rvest+V8直接执行页面JS

如果页面JS逻辑不复杂,可以直接提取页面里存储数据的JS变量,用V8引擎解析:

library(rvest)
library(V8)
library(dplyr)

link <- 'https://archive.twitter-trending.com/united-states/16-11-2023'
tt <- read_html(link)

# 提取包含趋势数据的JS脚本(需查看页面源码确认变量名,这里是trendsData)
js_script <- html_nodes(tt, "script") %>% 
  html_text() %>% 
  grep("trendsData", ., value = TRUE)

# 初始化V8引擎并执行JS
ctx <- v8()
ctx$eval(js_script)

# 提取并输出数据
trends_data <- ctx$get("trendsData")
print(trends_data)

注意:这个方法依赖页面的JS变量名,如果网站更新代码结构,需要重新查找对应变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:05:04