使用rvest抓取APIS网站可折叠表格返回空值的技术求助
问题排查及解决方案
核心问题原因
你返回空值的核心问题是使用的CSS选择器.tab-tables :nth-child(1)和目标页面的实际节点结构不匹配,要么是页面不存在.tab-tables类的元素,要么是后代选择逻辑错误。
修正步骤
- 先确保已加载必要依赖包,初学者常遗漏这一步导致异常:
library(rvest) library(dplyr)
- 调试获取正确的CSS选择器:
打开目标页面按F12唤出开发者工具,点击左上角元素选择按钮,点选你要抓取的下拉标题/表格元素,在开发者工具的元素面板右键选中的对应节点,选择「复制」-「复制选择器」即可拿到准确的选择器。 - 参考可用采集代码:
link = "http://www.apis.ac.uk/select-feature?site=1001814&SiteType=SSSI&submit=Next" # 可添加UA和超时参数避免反爬和网络问题 page = read_html(link, timeout = 10, user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") # 提取所有折叠下拉标题,可替换为你自己复制的选择器 titles <- page %>% html_nodes(".card-header a") %>% html_text(trim = TRUE) # 提取标题对应下方的表格内容 table_content <- page %>% html_nodes(".card-body table") %>% html_table(fill = TRUE) # 输出为 下拉标题:对应内容 的结构 final_result <- setNames(table_content, titles)
额外调试技巧
如果还是拿不到内容,可以先运行page %>% html_structure()打印页面整体节点结构,确认你要的内容是否存在于静态页面中,排除内容是JS动态加载的情况(如果是JS动态加载的内容rvest无法直接抓取,需要用RSelenium等动态渲染工具)。
内容的提问来源于stack exchange,提问作者OP46
相关产品推荐
相关产品推荐

