使用Rvest检索隐藏在超链接后面的.csv下载。

问题描述 投票:0回答:1

我想用Rvest下载一个隐藏在网站上 "下载完整数据库 "链接后面的.csv。http:/friedmanlab.weizmann.ac.ilMcPAS-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,也许就可以了。

谢谢你,这是我的第一篇帖子,所以我为任何错误道歉! 我很感谢你的帮助。

r web-scraping rvest
1个回答
0
投票

好吧,我想明白了。结合使用rselenium和rvest,并等待至少15秒,让R shiny服务器放弃链接。

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)
© www.soinside.com 2019 - 2024. All rights reserved.