网页表格抓取(不同时间段的网络表格数据节点获取需要注意的事项!)
优采云 发布时间: 2022-01-09 20:06网页表格抓取(不同时间段的网络表格数据节点获取需要注意的事项!)
(1)数据URL获取
网易财经和新浪财经等网站数据可以免费获取,我们可以使用爬虫方式(通过rvest包)抓取对应的网站表数据,我们先在网易财经抓取600550例如,2019年第三季度的数据,其URL为:
,
可以看出,不同时间段的网址是有规律的,只需要更改里面的股票代码、年份、季节,就可以循环爬取多只股票的网页。
(2)网络表单数据节点获取
我们需要解析网页表数据的节点。除了系统地掌握网页设计的原理和基本结构外,我们还可以通过FireFox(Firebug插件)和Chrome浏览器对网页结构进行解析,得到相应的分支结构点。这里我们使用火狐浏览器,找到我们需要的表位置后(如何找到表位置请自行探索),右键复制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股*敏*感*词*的实时更新。这种方法可以用来建立我们自己的数据库进行实时分析。同时,通过网络爬虫,我们还可以爬取大量有意义的数据并实时更新。