R语言用rvest无法抓取动态多标签站表格 求目标标签页数据提取方案
问题原因
你用rvest直接抓取失败的核心原因是该页面为客户端渲染的动态页面,目标Characteristics板块的内容不会随初始HTML返回,是由JS异步加载、且需要点击对应标签才会渲染到DOM中,静态爬取工具无法直接获取。
可行解决方案(基于RSelenium)
完整实现代码
# 加载依赖 library(rvest) library(RSelenium) library(tidyverse) # 1. 启动Selenium驱动器,此处以Chrome为例,使用火狐可将browser参数改为firefox driver <- rsDriver(browser = "chrome", chromever = "latest", port = 4567L) remDr <- driver$client # 2. 导航到目标页面 URL <- "https://plants.sc.egov.usda.gov/home/plantProfile?symbol=ACPL" remDr$navigate(URL) # 3. 等待页面加载完成后,定位并点击Characteristics标签 # 可根据自身网络情况调整等待时长,也可替换为显式等待逻辑适配不同环境 Sys.sleep(3) char_tab <- remDr$findElement(using = "css selector", value = 'a[aria-controls="Characteristics"]') char_tab$clickElement() # 4. 等待Characteristics板块内容加载完成 Sys.sleep(2) # 5. 提取页面源码,用rvest解析得到目标数据框 page_source <- remDr$getPageSource()[[1]] char_df <- read_html(page_source) %>% html_element(css = "#Characteristics table") %>% html_table() # 6. 关闭驱动器释放资源 remDr$close() driver$server$stop() # 输出结果查看 print(char_df)
注意事项
- 若启动驱动器时报版本不匹配错误,将
chromever参数改为本地Chrome浏览器对应的版本号即可,火狐环境同理调整对应参数 - 爬取过程请遵守站点robots协议,控制请求频率,避免给服务器造成额外压力
内容的提问来源于stack exchange,提问作者Derek Corcoran
相关产品推荐
相关产品推荐

