«Несанкционированный» при использовании read.csv по ссылке https в R - PullRequest
0 голосов
/ 25 мая 2019

У меня есть ссылка, которая ведет к файлу .csv, если я непосредственно щелкаю по нему, но когда я пытаюсь прочитать его в R, вывод просто показывает несанкционированный.

Пожалуйста, смотрите коды ниже, я обахотите прочитать файл .csv по ссылке, первая работает отлично, но во второй вывод просто показывает «не авторизован; недопустимый файл cookie и т. д.»хотя это публичная ссылка.

library(readr)
library(RCurl)
download <- getURL("https://data.kingcounty.gov/api/views/yaai-7frk/rows.csv?accessType=DOWNLOAD")
data <- read.csv (text = download)
# Below doesn't work
download <- getURL("https://query1.finance.yahoo.com/v7/finance/download/^IXIC?period1=1556161210&period2=1558753210&interval=1d&events=history&crumb=dQjP5bTJfZn")
data <- read.csv (text = download)

Интересно, в чем причина проблемы?Имеет ли веб-сайт некоторую защиту от доступа без браузера или мне нужно что-то добавить в мой код?

1 Ответ

2 голосов
/ 25 мая 2019

Техника, которая работает с одной из форм очистки веб-страниц в R, может не работать с другими типами веб-сайтов. Доступ к данным с финансовых веб-сайтов является тому примером. Вот где знание лучшего пакета R для конкретной проблемы неоценимо.

Можно использовать пакет quantmod для доступа к данным из Yahoo Finance. Используя биржевую биржу из OP, вот пример того, как использовать quantmod для доступа к данным 2018 года для Nasdaq Composite Stock Index.

library(quantmod)
from.dat <- as.Date("01/01/18",format="%m/%d/%y")
to.dat <- as.Date("12/31/18",format="%m/%d/%y")
# access 2018 data for the Nasdaq Composite Index 
getSymbols("^IXIC",from=from.dat,to=to.dat,src="yahoo")
head(IXIC)

... и результаты:

> head(IXIC)
           IXIC.Open IXIC.High IXIC.Low IXIC.Close IXIC.Volume IXIC.Adjusted
2018-01-02   6937.65   7006.91  6924.08    7006.90  1914930000       7006.90
2018-01-03   7017.07   7069.15  7016.70    7065.53  2166780000       7065.53
2018-01-04   7089.50   7098.05  7072.38    7077.91  2098890000       7077.91
2018-01-05   7105.74   7137.04  7097.08    7136.56  2020900000       7136.56
2018-01-08   7135.38   7161.35  7124.09    7157.39  2051430000       7157.39
2018-01-09   7174.19   7181.14  7148.30    7163.58  2107300000       7163.58
> 

Обратите внимание, что quantmod не требует учетных данных или файлов cookie для доступа к данным из Yahoo Finance.

Получение списка биржевых символов

Отвечая на комментарий к моему ответу, вот код, который позволит обрабатывать список биржевых тикеров в функции apply().

tickers <- c("^IXIC","GOOG","IBM")
# get a list of symbols
tickerList <- lapply(tickers,function(x){
     message(paste("getting symbol:",x))
     aName <- getSymbols(x,from=from.dat,to=to.dat,src="yahoo")
     assign(aName,get(aName),envir = .GlobalEnv) # assign to global env
     aName
})

После завершения lapply() можно наблюдать структуры данных xts в средстве просмотра среды RStudio, как показано на следующем снимке экрана.

enter image description here

...