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

Posted

技术标签:

【中文标题】使用 R 进行网页抓取:看不到可下载的链接【英文标题】:Web scraping with R: can't see the downloadable links 【发布时间】:2021-10-25 09:39:46 【问题描述】:

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

我尝试使用rvest 来显示可下载的链接,但这里相同,它只返回页眉和页脚中的链接:

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

返回:

#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"  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>

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

【问题讨论】:

这可能很难做到,因为页面可能依赖于 javascript 来呈现。对于 python (see here) 已经回答了一个类似的问题,它提供了一个如何搭载 Web 浏览器的示例。 感谢您的链接,它非常有用。你知道如何自动抓取这种页面吗?我想一定有办法做到这一点 也许 phantomJS 可以帮助你。看看this page,这可以帮助你。 这是一个非常好的教程,但即使使用 phantomjs,问题仍然存在...... 【参考方案1】:

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

library(jsonlite)

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

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

为了重用,你可以重写为一个接受起始链接作为参数的函数:

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')

【讨论】:

感谢您的帮助。我注意到这是到 DL 的正确链接。问题是我有几个这样的网页可以从中下载数据集,https://b2share.eudat.eu/api/records/ 之后的部分对于每个数据集总是不同的。在包含下载数据的所有 URL 的 excel 表中,我只有网页的 URL,而不是这个可下载的链接。所以我不知道如何从每个网页中获取这个可下载的链接 请提供另一个示例链接

以上是关于使用 R 进行网页抓取:看不到可下载的链接的主要内容,如果未能解决你的问题,请参考以下文章

网页抓取R中的多个页面

使用PHP的cURL库进行网页抓取

c#抓取动态网页中的数据

如何通过Java代码实现对网页数据进行指定抓取

使用 Spotify API 进行网页抓取

python怎么抓取网页中DIV的文字