html_attr "href" 不提取 link

html_attr "href" does not extract link

我想在此处下载“档案”选项卡中文本为“模块 4”的文件:

https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier

首先我想获得link。 我的代码如下:

"https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier" %>% 
    read_html %>% 
    html_nodes(".gba-download__text") %>% 
    .[[4]] %>% 
    html_attr("href")

(我知道 .[[4]] 不是很好,这不是我的完整代码。) 这导致 NA,我不明白为什么。 类似问题在这里无济于事。

使用xpath更容易到达特定节点:

library(rvest)

"https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier" %>% 
    read_html %>% 
    html_nodes(xpath = "//span[contains(text(),'Modul 4')]/..") %>% 
    .[[1]] %>% 
    html_attr("href")

#> [1] "/downloads/92-975-67/2011-12-05_Modul4A_Apixaban.pdf"

艾伦已经留下了简洁的答案。但是让我换一种方式。如果查看页面源,可以看到目标在 .gba-download-list 中。 (实际上有两个。)因此,获取该部分并向下走到 href 部分。获得 url 后,您可以使用 grep() 来识别包含 Modul4 的 link。我最后用 unique() 来删除一个骗局。

read_html("https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier") %>% 
  html_nodes(".gba-download-list") %>%
  html_nodes("a") %>% 
  html_attr("href") %>% 
  grep(pattern = "Modul4", value = TRUE) %>% 
  unique()

[1] "/downloads/92-975-67/2011-12-05_Modul4A_Apixaban.pdf"

我现在有另一个解决方案,想分享一下:

"https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier" %>% 
    read_html %>% 
    html_nodes("a.download-helper") %>% 
    html_attr("href") %>% 
    .[str_detect(., "Modul4")] %>% 
    unique

使用带有 contains 运算符的 css 选择器按子字符串定位 href 会更快。另外,只需要返回单节点匹配

library(rvest)

 url <- "https://www.g-ba.de/bewertungsverfahren/nutzenbewertung/5/#dossier"
 link <-  read_html(url) %>% 
    html_node("[href*='Modul4']") %>% 
    html_attr("href") %>% url_absolute(url)