如何使用rvest从PubMed页面HTML提取首个h4下的研究引用?
提取首个h4层级下的研究引用文本(rvest实现)
解决思路
要获取第一个h4标签对应的研究引用(即其下方refs-list容器内的h5文本),需精准定位目标节点,同时注意补全原始HTML中缺失的闭合标签(否则解析会出现结构错误)。
方法一:XPath选择器实现
library(rvest) library(xml2) # 补全闭合标签后的HTML文本 text = '<!DOCTYPE html> <html lang="en" > <div class="references" id="references"> <h4 class="refs-list-title">References to studies included in this review</h4> <div class="refs-list"> <h5 class="refs-list-title">Ahn 2008</h5> <h5 class="refs-list-title">Al‐Shehr 2020</h5> </div> <h4 class="refs-list-title">References to studies excluded from this review</h4> <div class="refs-list"> <h5 class="refs-list-title">Smith 2020</h5> </div> </div> </html>' pubmed_page = read_html(text) # 提取目标文本 included_studies = xml_find_all(pubmed_page, ".//div[@id='references']/h4[@class='refs-list-title'][1]/following-sibling::div[@class='refs-list'][1]/h5[@class='refs-list-title']") %>% xml_text() print(included_studies)
XPath逻辑说明:
- 定位最外层参考文献容器:
.//div[@id='references'] - 选择容器内第一个h4标签:
/h4[@class='refs-list-title'][1] - 选中该h4的首个同级
refs-list容器:/following-sibling::div[@class='refs-list'][1] - 提取容器内所有h5标签文本:
/h5[@class='refs-list-title']
方法二:CSS选择器实现
# 用CSS选择器提取目标文本 included_studies_css = pubmed_page %>% html_element("#references .refs-list-title:nth-of-type(1) + .refs-list") %>% html_elements(".refs-list-title") %>% html_text() print(included_studies_css)
CSS选择器逻辑说明:
#references .refs-list-title:nth-of-type(1):选中references容器内第一个refs-list-title类元素(即第一个h4)+ .refs-list:选择该h4紧邻的下一个refs-list类容器- 提取容器内所有
refs-list-title类的h5文本
内容的提问来源于stack exchange,提问作者agbarnett
相关产品推荐
相关产品推荐

