爬虫实践--CBA历年比赛数据
闲来无聊,刚好有个朋友来问爬虫的事情,说起来了CBA这两年的比赛数据,做个分析,再来个大数据啥的。来了兴趣,果然搞起来,下面分享一下爬虫的思路。
1、选取数据源
这里我并不懂CBA,数据源选的是国内某门户网站的CBA专栏,下面会放链接地址,有兴趣的可以去看看。
2、分析数据
经过查看页面元素,发现页面是后台渲染,没办法通过接口直接获取数据。下面就要分析页面元素,看到所有的数据都是存在表格里面的,这下就简单了很多。
3、确定思路
思路比较简单,通过正则把所有行数据都提取出来,过滤掉无用的修饰信息,得到的就是想要的数据。此处我把每行的列符合替换成了“,”方便用csv记录数据。
经过过滤之后的数据如下:
球队,第一节,第二节,第三节,第四节,总比分
广州,33,37,36,27,133
北控,23,18,17,34,92
2019-01-1619:35:00轮次:31场序309开始比赛 比赛已结束
首发,球员,出场时间,两分球,三分球,罚球,进攻,篮板,助攻,失误,抢断,犯规,盖帽,得分
,张永鹏,25.8,7-9,0-0,1-1,4,8,3,0,0,1,0,15
,鞠明欣,19.1,2-4,1-2,0-0,2,5,2,2,0,1,0,7
,西热力江,25.5,1-1,4-8,0-0,1,2,4,1,3,1,0,14
,郭凯,15.5,2-2,0-0,0-0,2,3,0,2,0,2,0,4
,凯尔·弗格,38.1,5-9,5-9,11-11,0,10,12,2,2,4,0,36
,姚天一,12.3,0-1,1-4,0-0,0,1,5,0,0,0,0,3
,科里·杰弗森,24.0,4-4,2-4,3-4,0,6,0,1,0,1,1,17
,陈盈骏,22.6,1-1,2-7,1-1,0,2,4,2,1,2,0,9
,司坤,19.0,2-2,0-2,0-0,0,5,1,0,1,4,0,4
,孙鸣阳,20.6,2-3,0-0,3-3,1,4,1,2,3,4,0,7
,谷玥灼,7.4,1-1,1-2,0-0,0,0,2,0,0,0,0,5
,郑准,10.1,3-4,2-3,0-0,0,2,0,0,0,1,0,12
,总计,240.0,30-41(73.2%),18-41(43.9%),19-20(95.0%),10,48,34,12,10,21,1,133
首发,球员,出场时间,两分球,三分球,罚球,进攻,篮板,助攻,失误,抢断,犯规,盖帽,得分
,于梁,20.8,1-3,0-1,0-0,0,0,2,0,1,5,0,2
,于澍龙,17.9,0-1,1-3,0-0,0,2,1,2,0,1,0,3
,许梦君,46.2,1-3,5-12,0-0,1,6,2,1,0,3,0,17
,托马斯·罗宾逊,43.4,9-20,0-2,9-14,3,11,5,2,1,3,1,27
,杨敬敏,16.0,3-4,0-3,0-0,0,0,0,2,0,1,0,6
,孙贺男,2.8,0-0,0-0,0-0,0,0,0,1,0,1,0,0
,刘大鹏,28.0,1-1,3-5,0-0,1,4,3,2,2,3,0,11
,张铭浩,8.5,0-0,0-0,1-2,0,0,0,0,1,1,0,1
,张帆,27.5,5-7,1-3,0-0,0,1,6,4,1,2,0,13
,王征,23.3,3-3,0-0,6-8,0,2,0,0,1,1,1,12
,常亚松,5.6,0-0,0-1,0-0,0,1,0,1,2,0,0,0
,总计,240.0,23-42(54.8%),10-30(33.3%),16-24(66.7%),5,27,19,15,9,21,2,92
下面分享自己代码:
package com.fun
import com.fun.frame.Save
import com.fun.frame.httpclient.FanLibrary
import com.fun.utils.Regex
import com.fun.utils.WriteRead
class sd extends FanLibrary {
public static void main(String[] args) {
int i = 1
def total = []
range(300, 381).forEach {x ->
total.addAll test(x)
}
Save.saveStringList(total, "total4.csv")
testOver()
}
static def test(int i) {
if (new File(LONG_Path + "${i}.csv").exists()) return WriteRead.readTxtFileByLine(LONG_Path + "${i}.csv")
String url = "http://cbadata.sports.sohu.com/game/content/2017/${i}"
def get = getHttpGet(url)
def response = getHttpResponse(get)
def string = response.getString("content").replaceAll("\\s", EMPTY)
// output(string)
def all = Regex.regexAll(string, "<tr.*?<\\/tr>")
def list = []
all.forEach {x ->
def info = x.replaceAll("</*?tr.*?>", EMPTY).replaceAll("</t(d|h)>", ",")
info = info.replaceAll("<.*?>", EMPTY)
info = info.charAt(info.length() - 1) == ',' ? info.substring(0, info.length() - 1) : info
if (info.startsWith("总计")) info = "," + info
list << info
output(info)
}
Save.saveStringList(list, "${i}.csv")
return list
}
}
有兴趣的,可以后台回复“大爷来玩啊”获取本人微信号,咱们私聊。
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- 基于java的直线型接口测试框架初探
- JUnit中用于Selenium测试的中实践
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 成为优秀自动化测试工程师的7个步骤
- 手动测试存在的重要原因
- 成为自动化测试的7种技能
- 自动化和手动测试,保持平衡!
- 自动化测试生命周期
- 如何在DevOps引入自动化测试
大咖风采
爬虫实践--CBA历年比赛数据的更多相关文章
- 爬虫实践——数据存储到Excel中
在进行爬虫实践时,我已经爬取到了我需要的信息,那么最后一个问题就是如何把我所爬到的数据存储到Excel中去,这是我没有学习过的知识. 如何解决这个问题,我选择先百度查找如何解决这个问题. 百度查到的方 ...
- 朱晔的互联网架构实践心得S1E10:数据的权衡和折腾【系列完】
朱晔的互联网架构实践心得S1E10:数据的权衡和折腾[系列完] [下载本文PDF进行阅读] 本文站在数据的维度谈一下在架构设计中的一些方案对数据的权衡以及数据流转过程中的折腾这两个事情.最后进行系列文 ...
- python爬虫——对爬到的数据进行清洗的一些姿势(5)
做爬虫,当然就要用数据.想拿数据进行分析,首先清洗数据.这个清洗数据包括清除无用数据列和维度,删除相同数据,对数据进行勘误之类的. 从各大不同新闻网站可以爬到重复新闻...这个可以有.之前为了对爬到的 ...
- 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍
爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...
- 模拟美式橄榄球比赛数据(R)
获得和清洗数据: 1.从网络上抓取数据 year<- url<-paste("http://sports.yahoo.com/nfl/stats/byteam?group=Off ...
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
- 【爬虫】把抓到数据存起来——爬虫绝配mongodb
[爬虫]把抓到数据存起来——爬虫绝配mongodb 视频地址 抓取数据的方法,前面的课程该讲的都已经讲了,爬取下来数据只是第一步,第二步就是要先存起来.我们最容易想到的就是存文件里喽,python写文 ...
- Python爬虫工程师必学APP数据抓取实战✍✍✍
Python爬虫工程师必学APP数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- Python爬虫工程师必学——App数据抓取实战
Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
随机推荐
- Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/1.14-alpine: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fnginx%3Apull&service=registry.docker.
docker pull 镜像时报错: Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/man ...
- Windows 服务程序(二)
服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...
- advisor调优工具优化sql(基于sql_id)
advisor调优工具优化sql(基于sql_id) 问题背景:客户反馈数据库迁移后cpu负载激增,帮忙查看原因 解决思路:1> 查看问题系统发现有大量的latch: cache buffers ...
- collectionView reloadData走了不执行cellForItemAtIndexPath
有可能是sizeForItemAtIndexPath方法中的前几个cell没有设置大小, 这里必须设置, 哪怕是设置一个很小的值
- 个人考场VIM配置
前言 这个是我个人使用的Vim配置.双引号杠掉的部分是关于光标行列高亮(觉得难受而杠)和输入左括号同时打上右括号的(不习惯),如果要启用的话去掉引号即可. 将以下要启用的输入到$“./vimrc”$中 ...
- org.thymeleaf.exceptions.TemplateInputException: Error resolving template 报错
org.thymeleaf.exceptions.TemplateInputException: Error resolving template报错 遇到二次,第一次是刚刚学的时候,都是一个原因,而 ...
- textbox获取焦点选中内容
前台: <TextBox VerticalAlignment="> <TextBox.Style> <Style TargetType="TextBo ...
- (七)javac编译
文章目录 1.基本格式 2.目标路径 2.1 缺省项 2.2 指定路径 2.2.1 全路径 2.2.2 相对路径 3.源文件 3.1 无第三方库 3.1.1 基本方法 3.1.2 添加目录 3.1.3 ...
- 设计模式C++描述----15.策略(Strategy)模式
一. 举例说明 以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法. 结构如下: Algorithm:抽象类,提供算法的公共接口. RSA_Algorith ...
- jvm虚拟机栈的作用
jvm虚拟机栈的作用 jvm虚拟机栈栈帧的组成 jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成 局部变量表-存储方法参数,内部使用的变量 操作数栈-在变量进行存储时,需 ...