Получение данных для загрузки для большого диапазона дат при разборе веб-адреса Yahoo Yahoo - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть скрипт, который анализирует исторические данные о ценах Yahoo Finance для вектора символов тикера.Он также использует коды даты в URL для таймфрейма с 01.01.2014 по вчерашний день.Нет проблем заставить его работать, но я получаю только первые 100 строк.Похоже, проблема в том, что Yahoo Finance (даже если выбран большой диапазон данных) будет показывать только первые 100 результатов, пока вы не прокрутите страницу вниз.Есть ли обходной путь?

Вы можете увидеть, что проблема идет здесь ...

#Example to test...
Ticker <- c("AMZN","F")
maxDate <- 1548918000

for (s in Ticker){
      url <- paste('https://finance.yahoo.com/quote/',s, '/history?period1=1388559600&period2=',maxDate,'&interval=1d&filter=history&frequency=1d',sep="")
       webpage <- readLines(url,warn=FALSE)
      html <- htmlTreeParse(webpage, useInternalNodes = TRUE, asText = TRUE)
       tableNodes <- getNodeSet(html, "//table")
      assign(s, readHTMLTable(tableNodes[[1]],

header=c("Date","Open","High","Low","Close","Adj. Close","Volume")))
      df <- get(s)
      df['Symbol'] <- s
      assign(s, df)
 }

tickerDataList <- cbind(mget(Ticker))
tickerData <- do.call(rbind, tickerDataList)

Ожидаемые результаты будут такими же, но с датой назаддо 01.01.14.Это будет означать, что будет несколько тысяч строк против двухсот.

1 Ответ

0 голосов
/ 01 февраля 2019

Мы можем использовать то, что предлагает этот ответ .Например,

library(RSelenium)
library(rvest)
rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("https://finance.yahoo.com/quote/AMZN/history?period1=1388559600&period2=1548918000&interval=1d&filter=history&frequency=1d")

for(i in 1:5){      
  remDr$executeScript(paste("scroll(0,", i * 10000,");"))
  Sys.sleep(3)    
}

page_source <- remDr$getPageSource()
out <- read_html(page_source[[1]]) %>% html_nodes("table") %>% html_table()
nrow(out[[1]])
# [1] 801

801 строк - это еще не все, что вам нужно, но прокрутка более 5 раз (и, возможно, увеличение 10000) в конечном итоге даст вам результат.

...