如何设置从NSE网站下载的正确RCurl选项

时间:2015-08-30 02:46:20

标签: r curl rcurl

我正在尝试从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并更改了用户代理,但未成功。

任何帮助将不胜感激。

2 个答案:

答案 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