如何使用 R 包 rvest 正确执行 Xpath 英文文本搜索(目前似乎不起作用)?

问题描述 投票:0回答:1

学习 rvest 并希望用它来查询信息网站以确定它们是否包含(然后可以提取)某些信息。例如,在美国疾病预防控制中心主网站上:

https://www.cdc.gov

我想了解有关“爆发”的更多信息。我看到主网站有一个“爆发”按钮,因此想从该按钮中提取信息。我检查了 Chrome Devtools 中的页面,发现该按钮包含值为“Outbreaks”的文本

只需使用 Chrome Devtools,我就可以执行 Cntrl-F 并使用我在 CDC 网站上的按钮中查找的文本信息(例如“爆发”)输入 Xpath 查询,如下所示:

//a[contains(text(),"Outbreaks")]

然后 Chrome Devtools 找到与我正在寻找的 Outbreak 按钮链接相对应的适当节点。

我预计 R 中的以下脚本与 rvest 会完成同样的事情:

library(rvest)
library(dplyr)
test <- read_html_live("https://www.cdc.gov")
test %>% html_elements(xpath= "//a[contains(text(),'Outbreaks')]")

然而,它没有产生任何结果:

{xml_nodeset (0)}

因此,我不确定我的 rvest 语法是否有问题,或者 rvest 是否无法执行此类文本搜索。我的理解是 read_html_live 函数应该能够使用 xpath 抓取动态生成的网站。谢谢你。

r web-scraping xpath rvest
1个回答
0
投票

因此,您遇到的问题更多地与选择器有关。如果您只想从下拉菜单中获取 href,您可以这样做。

library(rvest)

url = 'https://www.cdc.gov/'

session = read_html_live(url)

 session |> 
  html_elements('#navbarSupportedContent li.nav-item.dropdown.outbreaks a') |> 
  html_attr('href')
#>  [1] "#"                                                                          
#>  [2] "https://www.cdc.gov/outbreaks/index.html"                                   
#>  [3] "https://www.cdc.gov/salmonella/outbreaks/cucumbers-11-24/index.html"        
#>  [4] "https://www.cdc.gov/listeria/outbreaks/meat-and-poultry-products-11-24.html"
#>  [5] "https://www.cdc.gov/ecoli/outbreaks/e-coli-O121.html"                       
#>  [6] "/marburg/situation-summary/index.html"                                      
#>  [7] "/measles/data-research/"                                                    
#>  [8] "/lead-prevention/news/outbreak-applesauce-pouches.html"                     
#>  [9] "https://www.cdc.gov/outbreaks/index.html"                                   
#> [10] "https://www.cdc.gov/outbreaks/index.html"

如果您想导航到

outbreaks
页面,那么在 rvest 中您可以按照以下方式进行操作

library(rvest)

url = 'https://www.cdc.gov/'

session = read_html_live(url)

session$click('#outbreaksDropdown')

创建于 2024 年 12 月 10 日,使用 reprex v2.1.1

© www.soinside.com 2019 - 2024. All rights reserved.