使用 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')
我正在尝试从 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')