学习 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 抓取动态生成的网站。谢谢你。
因此,您遇到的问题更多地与选择器有关。如果您只想从下拉菜单中获取 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