您的位置:首页 > 运维架构 > 网站架构

R语言一键爬取英格兰足球超级联赛16-17赛季所有比分(基于RCurl)

2017-09-05 20:39 633 查看

一、背景交代

本人破厂铁杆,上周刚被红军血虐,并且主队上赛季战绩不佳,无缘欧冠,实在心如死灰(手动捂脸)。

这次也用RCurl来尝试爬取一下英超联赛的所有比分,选取赛季为16-17赛季。

选择的网站不是大家平时关注多的一些门户网站,而是一家香港的专业足球网站(实时滚球加持buff),

网址为:http://data.7m.cn/database/index_big.htm ,页面如下:



二、对象定位

1、 一般基本的爬虫通过html页面或者解析json去爬取得到所需数据,但是这个网站无法右键查看源代码和检查。利用浏览器快捷键 ctr+shift+I 直接进入检查界面。

2、 接下来轻车熟路,找到JS,F5刷新,发现第二个fixgure.js就是要找的数据。



3、双击fixgure.js,跳转到数据所在的页面,得到网址:

http://data.7m.cn/history_matches_data/2016-2017/92/big/fixture.js



三、编写代码,解析网址

require(RCurl)
#目标网页网址
url="http://data2.7m.cn/history_Matches_Data/2016-2017/92/big/fixture.js"
#伪装表头
myheader=c("Accept"="text/html, application/xhtml+xml, */*",
"Referer"="http://data2.7m.cn/matches_data/92/big/index.shtml",
"Accept-Language"="zh-CN",
"User-Agent"="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36 QQBrowser/7.7.31732.400",
"Accept-Encoding"="gzip, deflate",
"Connection"="Keep-Alive"
)
t=basicTextGatherer()
temp=getURL(url,httpHeader=myheader,write=t,verbose=T,.encoding="UTF-8")

rd<-strsplit(t$value(),"\r\n")

rd[[1]][6]#轮次
rd[[1]][7]#比赛时间
rd[[1]][8]#比分
rd[[1]][11]#主队
rd[[1]][12]#客队

#接下来操作js里面的列表,疯狂解析

p_round<-regexpr("(\\d,)+(\\d{2},)+\\d{2}",rd[[1]][6])
c_round<-substr(rd[[1]][6],p_round[1],attr(p_round,"match.length")+p_round[1]-1)
rounds<-strsplit(c_round,",")#轮次

p_match_time<-regexpr('\\d{4},\\d{2},\\d{2},\\d{2},\\d{2},\\d{2}\\",(\\"\\d{4},\\d{2},\\d{2},\\d{2},\\d{2},\\d{2}\\",)+(\\"\\d{4},\\d{2},\\d{2},\\d{2},\\d{2},\\d{2})',rd[[1]][7])
c_match_time<-substr(rd[[1]][7],p_match_time[1],attr(p_match_time,"match.length")+p_match_time[1]-1)
match_time<-strsplit(c_match_time,'\\",\\"')#比赛时间

p_scores<-regexpr('(\\d-\\d\\(\\d-\\d\\)\\",)(\\"\\d-\\d\\(\\d-\\d\\)\\",)+(\\"\\d-\\d\\(\\d-\\d\\))',rd[[1]][8])
c_scores<-substr(rd[[1]][8],p_scores[1],attr(p_scores,"match.length")+p_scores[1]-1)
scores<-strsplit(c_scores,'\\",\\"')#比分

p_hometeam<-regexpr('(\\w+\\",)(\\"\\w+\\",)+(\\"\\w+)',rd[[1]][11])
c_hometeam<-substr(rd[[1]][11],p_hometeam[1],attr(p_hometeam,"match.length")+p_hometeam[1]-1)
hometeam<-strsplit(c_hometeam,'\\",\\"')#主队

p_awayteam<-regexpr('(\\w+\\",)(\\"\\w+\\",)+(\\"\\w+)',rd[[1]][12])
c_awayteam<-substr(rd[[1]][12],p_awayteam[1],attr(p_awayteam,"match.length")+p_awayteam[1]-1)
awayteam<-strsplit(c_awayteam,'\\",\\"')#客队

data<-matrix(c(rounds[[1]],match_time[[1]],hometeam[[1]],scores[[1]],awayteam[[1]]),ncol=5,nrow=380)
colnames(data)<-c("轮次","比赛时间","主队","赛果","客队")

getwd()
write.csv(data,"Super-Leagues.csv")
data


四、得到数据

打开保存的csv文件,数据如下。



接下来可以进一步就某支球队的情况具体分析,比如随时间的成绩波动、同城死敌较量历史战绩之类的,同样这个网站可以一直往前到04-05赛季的历史数据,相当强大了,至于其他的射手榜
a6d9
、助攻榜之类也可以同样的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息