2013-03-19 270 views
3

当我导航到此页面(http://hk.ishares.com/product_info/fund/overview/SEHK/2836.htm)并单击“NAV/Index History”链接(位于“Market Information”下)下载CSV文件时,该文件的内容为用英语。但是,如果我尝试做同样的通过使用以下命令R,内容是在中国:从多语言网站下载文件

download.file("http://hk.ishares.com/product_info/fund/excel_histoverview.htm?ticker=2836", destfile="2836.csv") 
a <- read.csv("2836.csv", skip = 5) 
> head(a) 
      日期 指數收市水平..HKD. 單位資產淨值 總派息.每股...HKD. 
1 2013年03月18日   3666.9390  15.7774     0 
2 2013年03月15日   3701.3143  15.9145     0 
3 2013年03月14日   3709.7446  15.9484     0 
4 2013年03月13日   3668.3178  15.8762     0 
5 2013年03月12日   3707.0364  15.9726     0 
6 2013年03月11日   3716.4011  16.0521     0 

据推测这是因为该网站是认识到我的浏览器中的cookie,并提供我的文件的英文版,但不是当我经历了R.

有没有办法解决这个问题?这导致我将CSV文件转换为XTS时遇到一些困难,因为我不知道如何将中文日期转换为日期对象。

谢谢。

+1

您是否尝试过'gsub(“[^ [:digit:]]”,“ - ”,a [,1])'作为快速修复? – 2013-03-19 10:47:38

+0

可能该网站正在使用基于客户端发送的“Accept-Language”头的内容协商? – CBroe 2013-03-19 11:01:44

+0

@ sebastian-c这几乎工作。我得到一个额外的连字符''2009-02-10-'' – mchangun 2013-03-19 11:06:29

回答

4

假设你已经安装了HTTR库,试试这个:

library(httr) 

# Get cookies from English page 
en_page <- GET("http://hk.ishares.com/product_info/fund/overview/SEHK/2836.htm?ls=true&l=en") 

# Get the data 
data <- GET("http://hk.ishares.com/product_info/fund/excel_histoverview.htm?ticker=2836", 
     set_cookies(en_page$cookies[[1]])) 

# Load into a data.frame 
a <- read.csv(textConnection(content(data)), skip = 5) 

head(a) 

基本上,我们从英文页面的饼干和我们发送这些请求。

+0

这很美。谢谢! – mchangun 2013-03-19 11:52:07