我正在尝试从NSE India网站(nseindia.com)下载文件。问题是网站管理员不喜欢从网站上下载文件或阅读页面的程序。他们似乎有一个基于用户代理的限制。
我尝试下载的文件是http://www.nseindia.com/archives/equities/bhavcopy/pr/PR280815.zip
我可以使用
从linux shell下载curl -v -A "Mozilla" http://www.nseindia.com/archives/equities/bhavcopy/pr/PR280815.zip
输出就是这个
关于连接()到www.nseindia.com端口80(#0) *尝试115.112.4.12 ...%接收的总%%Xferd平均速度时间时间当前 Dload上传总剩余速度0 0 0 0 0 0 0 0 - : - : - - : - : - - : - : - 0已连接
GET /archives/equities/bhavcopy/pr/PR280815.zip HTTP / 1.1 用户代理:Mozilla 主持人:www.nseindia.com 接受: / < HTTP / 1.1 200 OK<服务器:Oracle-iPlanet-Web-Server / 7.0<内容长度:374691< X-frame-options:SAMEORIGIN<最后修改: 周五,2015年8月28日12:20:02 GMT< ETag:" 5b7a3-55e051f2" < Accept-Ranges:bytes<内容类型:application / zip<日期:星期六,29 2015年8月17:56:05 GMT<连接:keep-alive< {[数据未显示] PK 5 365k 5 19977 0 0 34013 0 0:00:11 - : - : - 0:00:11 56592
这允许我下载文件。
我在R Curl中使用的代码就是这个
library("RCurl")
jurl <- "http://www.nseindia.com/archives/equities/bhavcopy/pr/PR280815.zip"
juseragent <- "Mozilla"
myOpts = curlOptions(verbose = TRUE, header = TRUE, useragent = juseragent)
jfile <- getURL(jurl,.opts=myOpts)
这也不起作用。
我还尝试使用 base 库中的download.file并更改了用户代理,但未成功。
任何帮助将不胜感激。
答案 0 :(得分:2)
library(curl) # this is not RCurl, you need to download curl
在工作目录中下载文件
curl_download("http://www.nseindia.com/archives/equities/bhavcopy/pr/PR280815.zip","tt.zip",handle = new_handle("useragent" = "my_user_agent"))
答案 1 :(得分:1)
首先,您的问题不是设置用户代理,而是下载二进制数据。这有效:
jfile <- getURLContent(jurl, .opts=myOpts, binary=TRUE)
以下是使用httr
代替RCurl
的(更多)完整示例。
library(httr)
url <- "http://www.nseindia.com/archives/equities/bhavcopy/pr/PR280815.zip"
response <- GET(url, user_agent("Mozilla"))
response$status # 200 OK
# [1] 200
tf <- tempfile()
writeBin(content(response, "raw"), tf) # write response content (the zip file) to a temporary file
files <- unzip(tf, exdir=tempdir()) # unzips to system temp directory and returns a vector of file names
df.lst <- lapply(files[grepl("\\.csv$",files)],read.csv) # convert .csv files to list of data.frames
head(df.lst[[2]])
# SYMBOL SERIES SECURITY HIGH.LOW INDEX.FLAG
# 1 AGRODUTCH EQ AGRO DUTCH INDUSTRIES LTD H NA
# 2 ALLSEC EQ ALLSEC TECHNOLOGIES LTD H NA
# 3 ALPA BE ALPA LABORATORIES LTD H NA
# 4 AMTL EQ ADV METERING TECH LTD H NA
# 5 ANIKINDS BE ANIK INDUSTRIES LTD H NA
# 6 ARSHIYA EQ ARSHIYA LIMITED H NA