闲来无聊,刚好有个朋友来问爬虫的事情,说起来了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
} }

有兴趣的,可以后台回复“大爷来玩啊”获取本人微信号,咱们私聊。

技术类文章精选

非技术文章精选

大咖风采

爬虫实践--CBA历年比赛数据的更多相关文章

  1. 爬虫实践——数据存储到Excel中

    在进行爬虫实践时,我已经爬取到了我需要的信息,那么最后一个问题就是如何把我所爬到的数据存储到Excel中去,这是我没有学习过的知识. 如何解决这个问题,我选择先百度查找如何解决这个问题. 百度查到的方 ...

  2. 朱晔的互联网架构实践心得S1E10:数据的权衡和折腾【系列完】

    朱晔的互联网架构实践心得S1E10:数据的权衡和折腾[系列完] [下载本文PDF进行阅读] 本文站在数据的维度谈一下在架构设计中的一些方案对数据的权衡以及数据流转过程中的折腾这两个事情.最后进行系列文 ...

  3. python爬虫——对爬到的数据进行清洗的一些姿势(5)

    做爬虫,当然就要用数据.想拿数据进行分析,首先清洗数据.这个清洗数据包括清除无用数据列和维度,删除相同数据,对数据进行勘误之类的. 从各大不同新闻网站可以爬到重复新闻...这个可以有.之前为了对爬到的 ...

  4. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  5. 模拟美式橄榄球比赛数据(R)

    获得和清洗数据: 1.从网络上抓取数据 year<- url<-paste("http://sports.yahoo.com/nfl/stats/byteam?group=Off ...

  6. Python爬虫工程师必学——App数据抓取实战 ✌✌

    Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...

  7. 【爬虫】把抓到数据存起来——爬虫绝配mongodb

    [爬虫]把抓到数据存起来——爬虫绝配mongodb 视频地址 抓取数据的方法,前面的课程该讲的都已经讲了,爬取下来数据只是第一步,第二步就是要先存起来.我们最容易想到的就是存文件里喽,python写文 ...

  8. Python爬虫工程师必学APP数据抓取实战✍✍✍

    Python爬虫工程师必学APP数据抓取实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  9. Python爬虫工程师必学——App数据抓取实战

    Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

随机推荐

  1. 1002. 写出这个数 (20)-PAT乙级真题

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字.输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每一 ...

  2. AWD攻防工具脚本汇总(二)

    情景五:批量修改ssh密码 拿到官方靶机第一件事改自己机器的ssh密码,当然也可以改别人的密码~ import paramiko import sys ssh_clients = [] timeout ...

  3. java控制执行流程

    控制执行流程 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html java当中涉及到的关键字包括if-else.whil ...

  4. vue——前端跨域

    ***针对的是不同域名.不同协议的跨域: 1.找到config文件中开发环境的配置文件——dev.env.js,在里面将要跨域的域名配置进去 2.找到config文件中线上环境的配置文件——prod. ...

  5. Linux面试题-8

    1.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于磁盘这种外部设备文件,一般应将其放在(C)目录中. A./bin B./etc C./dev D./lib 2.当使用mount进 ...

  6. CheckBox多选

    前台: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> & ...

  7. 包管理工具-yum

    yum介绍 yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器.基于 RPM 包管 ...

  8. matlab 7遇到的错误 解决方法

    安装路径 参考D:\matlab7 安装最后一步弹出 未找到解决方法.不过没有发现有何影响. 安装完成后出现 1. To configure Real-Time Windows Target you ...

  9. Redis(八)理解内存

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要. 高效利用Redis内存首先需要理解Redis内存消耗在哪里, ...

  10. Redis(十一)缓存设计

    一.缓存的收益和成本 左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构, 缓存加入后带来的收益如下: 加速读写:因为缓存通常都是全内存的(例如Redis.Memcache),而存储 ...