rvest包新手求教:使用R爬取网页表格无返回值如何解决
问题原因
你抓取失败的核心原因是目标站点的表格属于JavaScript动态渲染内容,静态HTML源代码中不存在预渲染的<table>标签结构。rvest默认仅能抓取服务器直接返回的静态源码,无法解析执行页面内嵌的JS脚本完成内容渲染,因此返回空白结果。
可行解决方案
推荐使用无头浏览器模拟真实用户访问场景,等待页面JS渲染完成后再提取内容,可使用chromote包实现,操作代码如下:
# 安装依赖包(首次使用执行) install.packages(c("chromote", "rvest", "dplyr")) # 加载工具包 library(chromote) library(rvest) library(dplyr) # 启动无头浏览器会话 b <- ChromoteSession$new() # 跳转至目标页面 b$Page$navigate("https://www.fantrax.com/fantasy/league/vu0zoow2kk7bh64k/standings") # 等待页面渲染完成,可根据网络情况调整等待时长(单位:秒) Sys.sleep(3) # 获取渲染完成后的完整HTML源码 rendered_html <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value # 关闭浏览器会话 b$close() # 解析源码提取表格 page <- read_html(rendered_html) tables <- page %>% html_table(fill = TRUE) # 定位「Standings - Points」对应的首个表格,可根据实际返回的列表索引调整 standings_points_df <- tables[[1]]
注意事项
- 可通过
print(length(tables))查看提取到的表格总数,调整索引值匹配你需要的「Standings - Points」表格 - 若网络波动大渲染慢,可适当延长
Sys.sleep()的时长,或加入元素存在性判断逻辑,确保提取源码时表格已经渲染完成 - 爬取过程中控制请求频率,遵守站点robots协议相关规则
内容的提问来源于stack exchange,提问作者ChazC
相关产品推荐
相关产品推荐

