使用rvest爬取网页指定文本时如何定位正确的目标标签?
rvest 爬取目标文本的代码调整
原代码匹配失效的核心原因
- 全局匹配
.u-visually-hidden类的范围过宽:该类名是站点通用的无障碍辅助标记,整页存在大量不同功能的同名节点,直接全局选会出现结果混杂、匹配错节点的问题 - 用
html_text()提取文本时会完整保留源码里的换行、首尾及连续冗余空格,和目标需要的规整文本格式不匹配
具体调整步骤
- 收窄选择器范围:把目标文本的父容器
.Match-centre-summary加入匹配规则,只锁定比赛摘要区块内的对应span节点,彻底排除其他位置的同名类干扰 - 替换文本提取方法:用自带文本规整能力的
html_text2()替代原生html_text(),自动把源码里的换行、连续空格合并为正常单空格 - 统一文本格式:将提取完成的文本转为小写,匹配目标文本的大小写要求
可直接运行的调整后代码
library(rvest) url <- 'https://www.nrl.com/draw/nrl-premiership/2019/round-1/storm-v-broncos/' # 读取页面源码 page_content <- read_html(url) # 精准定位目标文本所在节点 target_node <- html_nodes(page_content, '.Match-centre-summary span.u-visually-hidden') # 规整文本格式并统一大小写 target_result <- html_text2(target_node) |> tolower() # 转为所需的数据框结构 RawTable <- data.frame(extracted_text = target_result)
运行效果
上述代码执行完成后,RawTable中存储的提取结果为melbourne storm has achieved 4 tries brisbane broncos has achieved 2 tries,完全符合目标文本的提取要求。
小提示:如果遇到网络波动导致节点加载不完整,可在
read_html()中补充设置超时参数,提升请求稳定性。
内容的提问来源于stack exchange,提问作者Matt Jones
相关产品推荐
相关产品推荐

