【问题标题】:Retrieve a .csv download hidden behind a hyperlink using Rvest使用 Rvest 检索隐藏在超链接后面的 .csv 下载
【发布时间】:2020-05-02 08:29:47
【问题描述】:

我正在尝试使用 Rvest 下载隐藏在网站“下载完整数据库”链接后面的 .csv:http://friedmanlab.weizmann.ac.il/McPAS-TCR/

但是,当在 chrome 中使用检查元素时,href 链接在加载 url 时需要一秒钟的时间才会出现,因此在获取该数据时,href 不会被带入输出。

library(dplyr)
library(rvest)

page <- read_html("http://friedmanlab.weizmann.ac.il/McPAS-TCR/")

page %>% html_nodes("a")

输出

 [1] <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">\n          <span class="sr-only">Toggle navigat ...
 [2] <a href="#tab-5712-1" data-toggle="tab" data-value="1">Home</a>
 [3] <a href="#tab-5712-2" data-toggle="tab" data-value="2">Search Database</a>
 [4] <a href="#tab-5712-3" data-toggle="tab" data-value="3">Help</a>
 [5] <a href="#tab-5712-4" data-toggle="tab" data-value="About">About</a>
 [6] <a id="downloadDB" class="btn btn-default shiny-download-link " href="" target="_blank">\n                            <i  ...
 [7] <a href="#tab-7476-1" data-toggle="tab" data-value="FreeText">Enter Query</a>
 [8] <a href="#tab-7476-2" data-toggle="tab" data-value="file_upload">Or: upload file</a>
 [9] <a id="saveCSV" class="btn btn-default shiny-download-link " href="" target="_blank">\n                          <i class ...
[10] <a href="#dbglossary">Database Glossary</a>
[11] <a href="#analysis_examples">Usage examples</a>
[12] <a href="#dbsearch">How to search the database</a>
[13] <a href="#additionalResources">Additional resources</a>
[14] <a name="dbglossary">Database Glossary</a>
[15] <a href="http://www.uniprot.org/uniprot/">http://www.uniprot.org/uniprot/</a>
[16] <a href="http://www.iedb.org/">www.iedb.org</a>
[17] <a href="http://www.ncbi.nlm.nih.gov/pubmed" target="_blank">http://www.ncbi.nlm.nih.gov/pubmed</a>
[18] <a name="analysis_examples">Usage examples</a>
[19] <a id="dbsearch">How to search the database</a>
[20] <a name="additionalResources">Additional Resources</a>

[6] 将是我要选择的索引,然后获取 href。

是否可以与本网站建立连接,等待href属性出现,然后抓取并检索下载链接?我已经阅读了有关 Sys.sleep() 的信息,所以也许我可以加载网站,然后等待,然后获取可以工作的 href。

谢谢,这是我的第一篇文章,如有错误,我深表歉意!感谢您的帮助。

【问题讨论】:

  • 具有讽刺意味的是......一个闪亮的文件击败了rvest刮......

标签: r web-scraping rvest


【解决方案1】:

好的,我想通了。 rselenium 和 rvest 的组合,并等待至少 15 秒以使 R 闪亮服务器放弃链接

library(RSelenium)
library(rvest)

url <- "http://friedmanlab.weizmann.ac.il/McPAS-TCR/"

#connect to server
rd <- RSelenium::rsDriver(browser = "firefox")

#set client
remDr <- rd$client

#navigate to url
remDr$navigate(url)

#need to wait 15s at least for the href to appear
Sys.sleep(15)

#reading the html page
ext <- xml2::read_html(remDr$getPageSource()[[1]]) %>% 
  #selecting for links
  html_nodes("a") %>% 
  #getting those of attr href
  html_attr("href") %>% 
  #the link allways includes the word session
  stringr::str_subset("session")

#read in the csv
mc_db <- read.csv(paste0(url, ext), stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多