爬虫:在网易财经抓取表格数据案例

1)数据网址获取

网易财经和新浪财经等网站的数据可以免费获取,我们可以使用爬虫方法(通过rvest包)抓取相应网站的表格数据,我们首先以在网易财经中抓取600550在2019年第3季度的数据为例,其网址为:

http://quotes.money.163.com/trade/lsjysj_600550.html?year=2019&season=3

可以看到不同时间段的网址是有规律的,只需要更改其中的股票代码和year、season就可以进行多个股票的循环网页抓取。

2)网络表格数据节点获取

我们需要解析网页表格数据的节点,除了系统性地掌握网页设计原理和基本结构,还可以通过FireFox(Firebug插件)、Chrome浏览器来对网页结构进行解析得到相应的分支结构点,这里我们使用Firefox浏览器,具体操作为在找到我们需要的表格位置后(关于如何找到表格位置请自行探索),右键点击复制XPath路径。

表格部分的XPath为/html/body/div[2]/div[4]/table[1]。

3)抓取单个股票的单个页面数据 

library(rvest)
symbol=600550
year=2019
season=3
url=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
web=read_html(url)
xpath="/html/body/div[2]/div[4]/table[1]"
web.table=web%>%html_nodes(xpath=xpath)%>%html_table()

此时的web.table就是爬取到的数据

4)抓取单个股票的多个页面数据并合并

library(lubridate)
symbol=600550
from="2001-05-28"
from=as.Date(from)
to=Sys.Date()
time.index=seq(from=from,to=to,by="quarter")#生成以季度为开始的时间序列
year.id=year(time.index)#获取年份
quarter.id=quarter(time.index)#获取季度

price=list()
for(t in 1:length(time.index)){
  year=year.id[t]
  season=quarter.id[t]
  url=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
  web=read_html(url)
  xpath="/html/body/div[2]/div[4]/table[1]"
  web.table=web%>%html_nodes(xpath=xpath)%>%html_table()
  web.table=web.table[[1]][-1,]
  price[[t]]=web.table
}

5)抓取多个股票的多个页面数据并合并

get.wangyi.stock=function(symbol,from,to){
  from=as.Date(from)
  to=as.Date(to)
  if(mday(from==1)){
    from=from-1
  }
  time.index=seq(from=from,to=to,by="quarter")
  year.id=year(time.index)
  quarter.id=quarter(time.index)
  prices=list()
  for(t in 1:length(time.index)){
    year=year.id[t]
    season=quarter.id[t]  url=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
    web=read_html(url)
    xpath="/html/body/div[2]/div[4]/table[1]"
    web.table=web%>%html_nodes(xpath=xpath)%>%html_table()
    web.table=web.table[[1]][-1,]
    prices[[t]]=web.table
    }
  }
to=Sys.Date()
stock.index=matrix(nrow=6,ncol=2)
stock.index[,1]=c("600550.ss","600192.ss","600152.ss","600644.ss","600885.ss","600151.ss")
stock.index[,2]=c("2017-05-28","2017-05-28","2017-05-28","2017-05-28","2017-05-28","2017-05-28")
for(i in nrow(stock.index)){
  symbol=stock.index[i,1]
  from=stock.index[i,2]
  prices=get.wangyi.stock(symbol,from,to)
  filenames=paste0("D://dataset//",symbol,".csv")
}

6)读取所有A股数据

我们还可以将所有的A股代码整理为一个文件,读取后即可以实现对所有A股股票数据进行实时更新,可以通过这种方法来建立自己的数据库进行实时分析。同时通过网络爬虫,我们还可以爬取很多有意义的数据,并进行实时更新。

猜你喜欢

转载自www.cnblogs.com/amosding/p/12317959.html