r 直接从网上获取数据


1. 从网页上下载文件

download.file(url, destfile, method, quiet = FALSE, mode = "w",cacheOK = TRUE, extra = getOption("download.file.extra"))

  • url:文件的所在地址
  • destfile:下载后文件的保存地址,默认为工作目录
  • method: 提供"internal", "wget", "curl" 和 "lynx"四种method,在windows上通常internal就能解决大多数的问题,少数搞不定的如Cygwin, gnuwin32这种的"wget"就可以搞定;windows的二进制文件用“curl”,这个method对于Mac的用户来说是都要设置的;“lynx”主要针对historical interest。

应用举例:从新浪财经获取上市公司资产负债表,以泛微网络(603039)为例

url<-"http://money.finance.sina.com.cn/corp/go.php/vDOWN_BalanceSheet/displaytype/4/stockid/603039/ctrl/all.phtml"
download.file(url,destfile="balancesheet.xls")
这样文件“balance sheet.xls”就自动保存在工作目录下。如果要批量下载,可以用以下函数:

## symbol:股票代码 file:要储存的文件夹名
getbalancesheets<-function(symbol,file){
pre="http://money.finance.sina.com.cn/corp/go.php/vDOWN_BalanceSheet/displaytype/4/stockid/"
end="/ctrl/all.phtml"
url=paste(pre,symbol,end,sep="")
destfile=paste(file,"balancesheet_",symbol,".xls",sep="")
download.file(url,destfile)
} 
getbalancesheets("603038","./balancesheet/")


2. 抓取网页上表格

使用XML包中的readHTMLTable()函数

应用举例:获得中超数据

library(XML)
CslData <- readHTMLTable("http://cs.sports.163.com/fixture/", header = T)
CslPoint <- CslData[[31]]
CslData[[31]] <- NULL
CslFixture <- do.call(rbind, lapply(CslData, function(x) subset(x[, 3:5])))
colnames(CslFixture) <- iconv(colnames(CslFixture), "UTF-8")
colnames(CslPoint) <- iconv(colnames(CslPoint), "UTF-8") 
> head(CslFixture)
主队 比分 客队
NULL.1 广州富力 1 - 2 河北华夏幸福
NULL.2 河南建业 1 - 0 上海上港
NULL.3 上海绿地申花 1 - 1 延边富德
NULL.4 江苏苏宁易购 3 - 0 山东鲁能泰山
NULL.5 石家庄永昌 0 - 1 辽宁沈阳宏运
NULL.6 重庆力帆 2 - 1 广州恒大淘宝


3. 获取网页上非表格化数据

当获取表格数据时,可以用readHTMLTable来获取数据,很方便。当数据不是表格化的时,则常用xmlTreeParse(xmlParse)和getNodeSet配合来获取相应的数据。xmlTreeParse 来抓取页面数据,并且形成树。getNodeSet来对树结构数据,根据XPath语法来选取特定的节点集。下面举个实际例子来讲解一下这两个最重要函数的应用。

http://bbs.pinggu.org/thread-4192043-1-1.html





你可能感兴趣的:(r 直接从网上获取数据)