网上关于R的网络爬虫少之又少,即使找到代码,由于各方面原因总是不能成功运行。对于搞数据分析的筒子们来说,从互联网上获取数据是非常重要的,于是决定自己写一个简单的基于R的网络爬虫,然后共享出来供大家参考。
所扒的数据为新浪财经—股票---中国银行---历史信息中的第一页表格数据,连接:http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/601988.phtml?year=2015&jidu=2。
library(RCurl) temp=getURL("http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/601988.phtml?year=2015&jidu=2") #将此网页的元素装进temp k=strsplit(temp,"\r\n")[[1]] #将取出的网页按行划分,此时k有一个元素(属性),此属性有很多行,[[1]]为取出第一个元素 #k[4] #测试:取出第四行元素 #########################时间########################### timeadr=k[grep("a target='_blank'",k)+1] #根据正则表达式“a target='_blank'”定位要抓取的字符串,由于定位行的下一行时间比较好取,所以+1 time=substring(timeadr,4,13) #获得时间 #########################开盘价########################### fpriceadr=k[grep("a target='_blank'",k)+3] #获得”开盘价“定位行 fprice=gregexpr(">\\d+",fpriceadr) #获得"开盘价"在行中的准确位置。用正则表达式确定数字的位置(大于号后边紧跟一个或多个数字) fprices=fpriceadr #构造一个相同大小的向量 for(i in 1:length(fpriceadr)) { tempp=fprice[[i]] fprices[i]=substring(fpriceadr[i],tempp+1,tempp+attr(tempp,'match.length')+3) } fprices fprices=as.numeric(fprices) #########################最高价########################### topadr=k[grep("a target='_blank'",k)+4] ftop=gregexpr(">\\d+",topadr) ftops=topadr for(i in 1:length(topadr)) { tempp=ftop[[i]] ftops[i]=substring(topadr[i],tempp+1,tempp+attr(tempp,'match.length')+3) } ftops ftops=as.numeric(ftops) #########################收盘价########################### cpriceadr=k[grep("a target='_blank'",k)+5] cprice=gregexpr(">\\d+",cpriceadr) cprices=cpriceadr for(i in 1:length(cpriceadr)) { tempp=cprice[[i]] cprices[i]=substring(cpriceadr[i],tempp+1,tempp+attr(tempp,'match.length')+3) } cprices cprices=as.numeric(cprices) #########################最低价########################### lowadr=k[grep("a target='_blank'",k)+6] flow=gregexpr(">\\d+",lowadr) flows=lowadr for(i in 1:length(lowadr)) { tempp=flow[[i]] flows[i]=substring(lowadr[i],tempp+1,tempp+attr(tempp,'match.length')+3) } flows flows=as.numeric(flows) #########################交易量########################### sumadr=k[grep("a target='_blank'",k)+7] fsum=gregexpr(">\\d+",sumadr) fsum_2=gregexpr("\\d<",sumadr) #数字长度不同,用fsum和fsum_2截断 fsums=sumadr for(i in 1:length(sumadr)) { tempp=fsum[[i]] tempp_2=fsum_2[[i]] fsums[i]=substring(sumadr[i],tempp+1,tempp_2) } fsums fsums=as.numeric(fsums) #########################交易额########################### moneyadr=k[grep("a target='_blank'",k)+8] fmoney=gregexpr(">\\d+",moneyadr) fmoneys=moneyadr for(i in 1:length(moneyadr)) { tempp=fmoney[[i]] fmoneys[i]=substring(moneyadr[i],tempp+1,tempp++10) } fmoneys fmoneys=as.numeric(fmoneys) ########################################################## bank=cbind(time,fprices,ftops,cprices,flows,fsums,fmoneys) bank
时间: 2024-10-29 18:13:54