如果直接单击.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)
我想知道是什么原因引起的?该网站是否有针对非浏览器访问的保护措施?我是否需要在代码中添加一些内容?
答案 0 :(得分:2)
一种适用于R中一种形式的网页抓取的技术可能不适用于其他类型的网站。从金融网站访问数据就是一个很好的例子。在这里,了解针对特定问题的最佳R包非常重要。
一个人可以使用quantmod
包来访问Yahoo Finance中的数据。使用OP中的股票行情自动收录器,这是如何使用quantmod
访问纳斯达克综合股票指数2018年数据的示例。
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()
完成后,您可以在RStudio环境查看器中观察xts
数据结构,如以下屏幕截图所示。