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

使用rvest和SelectorGadget爬取网页表格返回空表,求替代方案

解决方案

问题分析

  1. 选择器错误:你用的#main li是列表容器,不是表格元素,直接提取会找不到表格;且原代码中html_table直接传入整个页面对象,没有定位到实际的表格节点。
  2. 反爬/动态加载:该网站可能通过检测请求头(如缺失浏览器User-Agent)或动态渲染(JS生成表格)阻止静态爬取,导致返回空内容。

方法1:添加请求头的静态爬取(优先尝试)

通过httr设置浏览器请求头,模拟正常访问,再用rvest定位表格节点:

library(rvest)
library(httr)

# 模拟Chrome浏览器请求头
ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"

# 发送带UA的请求
response <- GET(
  url = "https://pershingsquareholdings.com/performance/net-asset-value-and-returns/",
  user_agent(ua)
)

# 解析页面并提取所有表格
psh <- read_html(response)
psh_tables <- html_elements(psh, "#main li table") %>% 
  lapply(html_table, fill = TRUE)

# 查看结果
str(psh_tables)

方法2:动态渲染爬取(静态方法失效时用)

如果表格是JS动态生成的,用RSelenium模拟真实浏览器加载页面:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver <- rsDriver(browser = "chrome", port = 4567L)
remote_driver <- driver[["client"]]

# 访问目标页面并等待加载
remote_driver$navigate("https://pershingsquareholdings.com/performance/net-asset-value-and-returns/")
Sys.sleep(3) # 等待JS渲染完成

# 获取页面源码并解析
page_source <- remote_driver$getPageSource()[[1]]
psh <- read_html(page_source)
psh_tables <- html_elements(psh, "#main li table") %>% 
  lapply(html_table, fill = TRUE)

# 关闭浏览器
remote_driver$close()
driver$server$stop()

# 查看结果
str(psh_tables)

关键注意事项

  • 用html_elements(复数形式)提取多个表格,html_node只会返回第一个匹配项。
  • 若使用RSelenium,需提前安装对应版本的ChromeDriver,且Chrome浏览器版本需与Driver匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44