好久没写文章了,总想写点什么东西,刚好最近俄罗斯世界杯开幕了,所以仔细想了想,写一写Java爬取俄罗斯世界杯的数据吧,有需要的可以依照此方法可以对世界杯的数据进行数据分析。我计划写几篇的文章来仔细的说下Java爬取俄罗斯世界杯的相关经验。本篇文章不涉及相关代码说明,后续将会涉及相关代码说明,目前这种数据的采集时比较简单的。

一、    数据来源

既然要爬虫,首先我们需要找到上哪里去找俄罗斯世界杯相关的数据,目前很多的门户网站都提供了相关的世界杯的数据展示页面,我们可以从一些新浪、网易等去爬取我们需要的数据,目前我选中了新浪体育中的页面,来爬取俄罗斯世界杯的数据。

二、    数据页面

1、首先登录新浪体育的世界杯的专题首页面(http://2018.sina.com.cn/),如下所示:

2、接下来我们主要从【积分】、【射手】、【数据】等页签,进行数据的抓取,其中各个界面的效果图如下:
【积分】地址: http://2018.sina.com.cn/scoreboard/page.shtml,界面效果图:

【射手】界面地址:http://2018.sina.com.cn/scorer/page.shtml,效果图如下:

【数据】界面地址:http://2018.sina.com.cn/data/data.shtml,效果图如下:

这三个界面其实都是很不错的数据:
其中【积分】页面,可以知道俄罗斯世界杯32强的基本情况,比如分组、球队名、比赛场次、胜平负、积分等内容。
其中【射手】页面,可以知道俄罗斯世界杯进球的球员的基本信息,比如球员名、球队、进球、助攻等内容。
其中【数据】页面,可以知道俄罗斯世界球队与球员的基本信息,比如球队的射门次数、球队的传球次数,球员的射门次数,球员的助攻次数等内容。

三、数据发现

既然我们已经确定待采集数据的界面,下面我们需要分析一下和这个数据上的界面是怎么渲染出来,是服务器端渲染,还是客户端渲染。

这里我为什么要提到服务器端渲染和客户端渲染呢?
根据我的经验,一般网页的内容主要就是这两种渲染的方式:
如果新浪体育的俄罗斯世界杯的数据是服务器端渲染的,那么该网页的源代码中自然有我们需要的数据;
如果新浪体育的俄罗斯世界杯的数据是客户端渲染的,那么该网页的源代码中是看不见我们的数据的,只能通过浏览器调试工具查询实际生成的DOM树的信息。
那么对于新浪体育的2018年世界杯专题的【积分】页面是如何渲染的呢?
首页我们可以查看积分页面的源代码,可以看到相关的数据区域在源代码上是没有值的,所以这个积分页面中的数据是客户端JS渲染的,如下所示:

从图中可以看到这个ID名为scoreboard的区域是没有实际的数据的,只有相关的测试数据,所以我们可以确定该页面是通过JS技术进行客户端渲染, 既然知道了是客户端的渲染,那么我们如何找到实际数据的内容呢?
通常可以从以下途径找到实际的数据:
1、    源代码中的数据,某些网页会在服务器端把相关的数据写入到JS对象中。
2、    发送AJAX异步请求
3、    发送请求,请求后台的JS文件或某些接口来返回数据。
4、    查看调试工具的控制台,看是否有日志输出。
对于这个【积分】的页面,我们打开火狐浏览器的调试工具会发现,输出了一个JSON对象,而这个JSON对象的是从scoreboardPage.js中的57 行日志输出的,如下所示:

展开这个对象后,我们发现这个数据结构就是这个积分页面的需要的数据,如下图所示:

同时查看scoreboardPage.js中的57行的相关代码,如下图所示:

经过代码分析后,我们可以看见他调用一个ajax的方法,请求了一个地址,然后将返回的数据传给scoreHandle方法,进行页面的渲染,到这里详细有很多应该知道真么找到这个【积分】页面的数据了,通过浏览器调试工具监控发现,这个请求URL地址如下:
http://api.sports.sina.com.cn/?p=sports&s=sport_client&a=index&_sport_t_=football&_sport_s_=opta&_sport_a_=teamOrder&type=108&use_type=group&callback=cb_1da9fd2f_5595_4563_ab46_0570c721f313&dpc=1

请求了这个地址以后,就会返回【积分】页面的JSON结构数据,也就是我们需要的数据,同理,【射手】、【数据】页面也可以通过此种方式进行页面的获取。

如果想爬去这个网页的数据,后续我们将会用到HttpClient、Jsoup、HtmlUnit等Java包,来解析我们我们需要的数据。

目前这几个页面都为客户端渲染,在进行代码编码写时,可以用HttpClient去请求该接口地址,解析返回的JSON内容,这个是很好做的,如果不解析这个接口,我们可以通过Jsoup去解析网页的源代码,进行数据的爬取,不过前提要求是服务器端渲染的网页,对于这种客户端JS动态渲染的网页不太好进行爬虫获取,最近看到可以使用HtmlUnit进行爬取这种动态网页,最近也在研究这个东西。
目前我梳理了可以实现的两种方式进行新浪体育世界杯专题页面的相关数据的爬虫获取:
方式一:使用HttpClient请求数据的JSON格式接口进行获取。
方式二:通过使用浏览器调试工具,保存实际生成的HTML页面代码,使用Jsoup进行获取。

本篇文章就结束,后续将会进行进一步的说明。

2018年俄罗斯世界杯之Java数据爬虫(一)相关推荐

  1. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  2. ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略

    ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之详细 ...

  3. 同方威视安全护航2018年俄罗斯世界杯

    北京2018年7月24日电 /美通社/ -- 历时1个月的2018年俄罗斯世界杯落下帷幕,法国队4-2战胜克罗地亚队获得冠军,捧回大力神杯,时隔20年再次登上世界之巅.本届世界杯新人辈出,看点多多,使 ...

  4. 2018年俄罗斯世界杯对阵图(法国冠军杯![2018年 07月 12日 星期四 18:15:26 CST])

    A组 排名 球队 赛 胜 和 负 得 失 差 分 出线资格 1  俄罗斯 (H) 1 1 0 0 5 0 +5 3 晋级淘汰赛 2  乌拉圭 1 1 0 0 1 0 +1 3 3  埃及 1 0 0 ...

  5. 基于Java+数据爬虫+SSM架构实现手机购物网站前后台项目

    本基于SSM的手机购物网站系统,采用面向对象思想,选用javaweb开发技术,后台选用JavaSSM轻量级开发框架,使用tomcat8.0作为开发服务器,使用nginx实现反向代理,支持多台tomca ...

  6. Visa携手Zlatan Ibrahimović回归2018年FIFA俄罗斯世界杯

    Visa推出以足球超级明星为主角的全球营销活动,让球迷们不会错过今年夏天的精彩时刻 Visa将以创新的支付技术提升球迷们的比赛日体验 旧金山--(美国商业资讯)--国际足联(FIFA)官方支付服务合作 ...

  7. 2018俄罗斯世界杯冷门之夜!卫冕冠军德国0-1不敌墨西哥遭开门黑

    这次在俄罗斯开展的世界杯似乎为全世界的球迷了带来了许多惊喜.就在北京时间6月17日晚23时,在莫斯科卢日尼基球场开展的2018年俄罗斯世界杯F组中卫冕冠军德国竟不敌墨西哥给球迷爆了一个惊天大冷门. 比 ...

  8. Java网络爬虫--一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库

    一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 目录 一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 第一步:创建项目,搭建项目结构 p ...

  9. 2018世界杯赛程PHP源码,PHP-ML机器学习预测2018俄罗斯世界杯比赛结果

    前言: 根据2014年巴西世界杯的小组赛比赛结果和赔率数据简单预测2018世界杯比赛结果,比赛的赔率我们可以事先知道,所以可以使用赔率作为预测数据 技术: PHP ML库 贝叶斯分类器 样本数据:20 ...

  10. 2018 俄罗斯世界杯赛程时间表

    2018 俄罗斯世界杯已经在 6月14日正式拉开了序幕,在这里小编为广大生信人奉上本次世界杯的赛程表(北京时间). 希望大家在工作学习之余,能够开开心心去享受这场足球盛宴,同时祝福大家端午节快乐! 3 ...

最新文章

  1. 讲解虚拟服务器的书_程序员不得不看的书
  2. boost::hana::capture用法的测试程序
  3. cygwin图文安装教程
  4. 1. C++基础知识学习及其深入理解(面向对象部分还没学) -- 课程1完成
  5. 推荐个我在用的免费翻译软件,支持多家翻译API整合
  6. uniapp 使用uView UI教程
  7. 2021申请邓白氏编码最新操作手册
  8. Unity 2D 入门
  9. RTX 4070TI和RTX 3090TI性能哪个好 RTX 4070ti和RTX3090ti 差距
  10. 会议签到评分系统功能需求2020-5-9
  11. Android Studio编写一个手写字体识别程序
  12. 【数据结构复习自用】树的性质
  13. python做马尔科夫模型预测法_通过Python的Networkx和Sklearn来介绍隐性马尔科夫模型...
  14. RK CPU调试技巧
  15. 2012年计算机工作总结,计算机教师工作总结2011-2012
  16. 字体生成GAN(GlyphGAN)学习笔记
  17. 增量式编码器的工作原理与使用方法
  18. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 155期】
  19. JAVA 拼手气红包 领取算法 记录
  20. DDR4 Spec 第四章 4.26-4.27

热门文章

  1. Axure制作倒计时
  2. 程序员薪水差距在哪里?
  3. Excel表格中两列数据对比,找出异同的数据
  4. 顺序表的定义和基本操作
  5. js 获取到number的length
  6. openwrt之network配置文件
  7. linux 查看gnu,查看GNU/Linux信息
  8. 数据分析之 AB测试(AB Test)
  9. Shell脚本之免交互操作
  10. telnet远程登录服务器端口,Telnet服务器远程登录过程