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
、助攻榜之类也可以同样的操作。
相关文章推荐
- 【分享】2011~2013.5全球所有足球比赛比分数据以及足彩各公司盘口
- |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20所有这些字符串,把它的数字一个个剥离??
- R:抓取16~17赛季NBA球队实时数据
- 足球联赛管理系统所有数据库对象
- 《基于MFC的OpenGL编程》Part 16 Reflection
- XP硬盘安装Fedora17/Fedora16图解教程
- Spring Security(17)——基于方法的权限控制
- 练习1 - 17 打印长度大于80个字符的所有输入行
- 基于Redis的防刷票、防刷短信、及所有防刷系统的设计
- 基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合
- 连接oracle数据库,提示ORA-00162: external dbid length 17 is greater than maximum (16) ,问题解决
- 基于canvas的超级画板
- Android小技巧: 这里涵盖了所有实现 “一键退出 App” 的方法
- 基于R语言的数据标准化处理脚本
- 利用R语言获取最新所有股票数据
- 基于注解的前置通知-佟刚老师《Spring4视频教程》学习笔记(17)
- 一键填满所有磁盘空间
- Jquery李炎恢——16,17基础事件
- erlang:基于cowboy,一键创建erlang…
- 微信公众号开发之如何一键导出微信所有用户信息到Excel