使用 R 进行网页抓取:看不到可下载链接

Web scraping with R: can't see the downloadable links

我正在尝试从 this kind of webpage EDIT or this one 下载一些 .xlsx 文件。但是,当我想显示源代码时(右击-->查看源代码),我看不到实际网页的所有内容(只有页眉和页脚)。

我尝试使用 rvest 来显示可下载链接,但这里也一样,它 returns 只有页眉和页脚中的链接:

library(rvest)
html("https://b2share.eudat.eu/records/8d47a255ba5749e3ac169527e22f0068") %>% 
     html_nodes("a")

Returns:

#{xml_nodeset (5)}
#[1] <a href="https://eudat.eu">Go to EUDAT website</a>
#[2] <a href="https://eudat.eu"><img src="/img/logo_eudat_cdi.svg" alt="EUDAT CDI logo" style="max-width: 200px"></a>
#[3] <a href="https://www.eudat.eu/eudat-cdi-aup">Acceptable Use #Policy </a>
#[4] <a href="https://eudat.eu/privacy-policy-summary">Data Privacy Statement</a>
#[5] <a href="https://eudat.eu/what-eudat">About EUDAT</a>

知道如何访问所有页面的内容吗?

您需要将记录 ID 传递给 API 端点,该端点提供构建文件下载 links 的部分,如下所示:

library(jsonlite)

d <- jsonlite::read_json('https://b2share.eudat.eu/api/records/8d47a255ba5749e3ac169527e22f0068')

files <- paste(d$links$files, d$files[[1]]$key , sep = '/')

为了重复使用,您可以重新编写一个接受开始 link 作为参数的函数:

library(jsonlite)
library(stringr)

get_links <- function(link){
  record_id <- tail(str_split(link, '/')[[1]], 1)
  d <- jsonlite::read_json(paste0('https://b2share.eudat.eu/api/records/', record_id))
  links <- paste(d$links$files, d$files[[1]]$key , sep = '/')
  return(links)
}

get_links('https://b2share.eudat.eu/records/ce32a67a789b44a1a15965fd28a8cb17')
get_links('https://b2share.eudat.eu/records/8d47a255ba5749e3ac169527e22f0068')

您可以简化为:

library(jsonlite)

get_links <- function(record_id){
  d <- jsonlite::read_json(paste0('https://b2share.eudat.eu/api/records/', record_id))
  links <- paste(d$links$files, d$files[[1]]$key , sep = '/')
  return(links)
}

get_links('ce32a67a789b44a1a15965fd28a8cb17')
get_links('8d47a255ba5749e3ac169527e22f0068')