Получить загрузку .csv, скрытую за гиперссылкой, используя Rvest - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь использовать Rvest для загрузки .csv, скрытого за ссылкой "download the complete db" с сайта: http://friedmanlab.weizmann.ac.il/McPAS-TCR/

Однако при использовании элемента inspect в chrome ссылка href отображается в течение секунды при загрузке URL-адреса, и поэтому при извлечении этих данных href не включается в вывод.

library(dplyr)
library(rvest)

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

page %>% html_nodes("a")

output :

 [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.

Можно ли установить sh соединение с этим сайтом, дождаться появления атрибута href, а затем почистить и получить ссылку для скачивания? Я читал о Sys.sleep (), так что, возможно, если бы я мог загрузить веб-сайт, затем подождать, а затем получить ссылку, которая будет работать.

Спасибо, это мой первый пост, поэтому я прошу прощения за любые ошибки! Я ценю любую помощь.

1 Ответ

0 голосов
/ 02 мая 2020

Хорошо, я понял это. Комбинация 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)
...