BET365的websocket实时数据采集分析

article/2025/8/21 22:38:20

BET365网站websocket实时数据采集分析

**

前语:

**

本文仅用于交流学习,请勿用于非法用途,后果自负!

bet365是全球顶尖的涵盖足球篮球等各项赛事的赛事信息提供网站以及博彩网站。为啥要去爬这个网站呢?因为它赛事更新快,准,专业,赛事信息丰富。国内的很多赛事网站都是直接或者间接跟bet365的赛事信息有关系。
Bet365的赛事信息之所以更新快,这跟他的数据传输方式分不开,现在bet365的赛事信息更新是采用websocket的方式进行实时传输的。下图就是bet365的数据展示
这个就是效果图,赛事比分,赛事指数等都是使用websocket进行传输的
赛事比分,赛事指数等都是使用websocket进行传输的
在这里插入图片描述
红色框的内容,左边的就是websocket的请求连接,右边的就是实时传输过来的一些赛事数据,包括实时指数,实时比分等。
相信能搜到我这篇文章的朋友应该都对websocket这种传输方式有所了解了,我这里就不赘述了(我总不能说自己也不是很熟悉吧,哈哈)。好了,下面就让我们开始破解bet365的破解之路吧。

第一段,websocket需要我们发送握手请求过去,握手的请求我上面也说了,就是wss://premws-pt3.365lpodds.com/zap/?uid=03829507192487869类似于这种格式的,这里有个uid,后面的这一串数字应该是有用的,我们拿去全局搜索一下在这里插入图片描述
但是很可惜,没有。这说明,这个参数应该是js生成的。这个时候就要开始逆向了在这里插入图片描述
右边红色框额都代表着这个这个url在发出去之前都经历了什么,可以点击最右边的蓝色字体进入响应的代码块进行查看在这里插入图片描述
点进去后,是不是有种似曾相识的赶脚,没错,红色框的就是生成websocket请求地址的地方,不信的朋友可以设个断点看看,但是因为这个js代码是服务器动态生成发送过来的,所以,你断点重启后,会重新生成一个文件给你,不过不碍事,也可以在断点停住。接下来就一步步逆推了,逆推后面,你会定位到下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726233508331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xJQ0FPUElORw==,size_16,color_FFFFFF,t_70
红色字体就是我们生成uid的地方,我们可以点进去黄色底色的函数里查看在这里插入图片描述
看到没,右边红色框的就是uid的生成代码,你说你不信?不行的话,可以点击左边的e函数进去里面瞅瞅,你就会发现,这就是了,但是这个。。。懂得的人都懂,这就是js中随机生成一个随机数的函数。这就是随机生成随机数的函数,不用问度娘了,那为啥会这样呢,原因很简单,bet365的uid就是虚的反爬手段,其实只要是符合位数的随机数字都可以,哈哈。
第二段,只需要随机数字组合就可以获取到数据了么,很显然,不行的。通过查看前面的截图,我们知道接下来,需要session_id:D27057904C7715589A932B1B1DCA70AC000003,token值(最难获取的):m7AdXw==.yZly3XRicdw/1HkKKgFpxWRAkKOS0zKvQXzyzivNxsk=,其中:
session_id可以从https://www.bet365.com/defaultapi/sports-configuration这里请求而来,token则需要经过两层加密处理才能得到。细心的朋友可能已经注意到了,是的,在上面的截图中,其实,token已经出现过了。
在这里插入图片描述
很明显S(称第二token)就是我们最终需要获取的数据,但是看第一个红色框的数据(称第一token),跟S是类似的,但不一致的,这说明,fe函数是一个加密函数,把第一个token值加密生成第二个加密token值,点进去是这样的在这里插入图片描述
简单点说,就是把每一个第一token的值拆出来跟e.charMap的数组中的数据进行对应互换,然后再组合就生成了第二token,这里有两种方式进行操作,第一种:把加密代码直接拷下来,然后使用nodejs或者python的框架execjs进行执行js生成。
pip3 install PyExecJS
第二种是直译,理解代码然后把相应的加密函数翻译成python代码,也可以执行。
token值的获取从我们发现第一token的地方开始,逆推上去,会推到一个叫C的函数那里在这里插入图片描述
之前都是穿进去的init对象/token值,而在这个函数中,原本e是空的,但是C执行完后就出现了,说明第一tokenC中生成的理解C函数就知道,e = ae.join("") + String.fromCharCode(46) + se.join("")生成的46就是十进制的ASCII中的句号,ae在这里插入图片描述
se在这里插入图片描述
组合起来,第一token值就出现了。那ae,se又是哪来的呢?
通过当前文件搜索可知,在C函数下面,先定义了ae,se两个数组,然后通过下面两个函数ef,gh把符合条件的o赋值给指定位置。
而ef,gh函数是e对象的方法,e是传进去的对象,继续往下看可以看到e对象即是后面的boot对象,同时在这里插入图片描述

在这里找到了调用的地方,说明ae,se是在这里进行正式生成的(3号代码块中的绿色框代码),但是这个_0x271cd1又是什么呢?其实,这是bet365使用了一种叫做js代码混淆的技术,把原本比较易看的js代码进行了混淆,增加反爬难度,对js代码混淆的可以点击此处了解
bet365的代码混淆比较简单,比较容易理解,重点的就几个地方
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在1号处定义了一个具有上百数据内容的数组,然后使用2号函数进行数组内元素位置调整,调整完毕后跳转至3号代码块进行for循环操作,在for循环中跳转至4号代码块中执行对应函数。在3跟4执行期间需要经常跳转至5、6、7代码中进行数据提取,数据提取完成后再把提取出来的数据传给boot.gh函数进行ae、se赋值,for循环完成后,第一token值就生成了。看起来很复杂,其实,只要理解了代码运行流程,就执行比较繁琐了点。因为上述代码是服务器动态生成的,起始的_0x4d8a数组的元素也是动态生成的,所以我们不能直接通过直接拷贝响应代码进行生成参数。我这边采用的是通过请求https://www.bet365.com/,获取到响应后使用re正则动态提取相应代码,动态生成token值。

当我们把上面的参数都能自己生成了之后,我们就可以使用框架携带响应请求参数发送握手请求,获取数据了,当然我们还需要设置一些websocket的基础,比如设置请求的子协议:zap-protocol-v1,设置数据传输的数据格式:permessage-deflate (permessage-deflate 标头在握手中用于指示连接是否应使用压缩)。当把这些都设置好后,正常来说,是可以获取到数据了。但对于我们python来说,还有个难关,就是框架选择,那就是选择哪个websocket方面的框架来请求呢?事实上,对于一般的websocket连接,基本上都可以的,但对已bet365来说:并不是所有都能用,当你使用websocket/websocket-client框架进行操作时,会在获取到第一个响应之后报错断开连接在这里插入图片描述
折腾一段时间后,我改用了asyncio+webscokets框架,成功的获取到了数据
pip3 install websockets在这里插入图片描述
分享讲到这里,已经可以完工了。是的,可以完工了,只要设置断线重连,基本上数据都不会断了。

某些细心的小伙伴可能会发现一个细节,就是在最开始的webscoket请求url列表里,还有个url跟数据请求url很相似:wss://pshudws.365lpodds.com/zap/?uid=13386056174193506,而且每次都有,这个对数据获取是不是有什么影响呢?
观察那个url及数据交互的情况,在这里插入图片描述
当数据返回有这个数据之后,获取数据的url连接就会发送下图的数据
在这里插入图片描述
经过验证,这是发送的数据里也包含一个token值,而这个token值就是看似没关系的ulr连接返回来的token值经过第二次加密获取到的。那这些有什么用呢?通过对比实验,只有获取数据的ur链接运行的时候,获取数据的连接异常率会很高,平均五分钟自动断线重启一次,当两个都连接时,基本不会出现五分钟重启的现象。这对设置了异常断线自动重启的代码来说,没啥影响,算运行优化。
总结:
bet365实时数据获取的反爬处理流程可以概括为如下:1,url中的uid为指定位数的随机数字组合,发送的数据中的pstk可以通过https://www.bet365.com/defaultapi/sports-configuration请求得到,最难得token值首先通过首页的js代码中加密得到第一个token,把获取到的第一token值经过二次加密函数即可获取到正确的token值,获取到参数之后,把连接参数配置好,使用websockets框架即可获取到数据。
finally

本文仅用于交流学习,请勿用于非法用途,后果自负!

本人只是菜鸟一只,如果有说的不对的,欢迎大家指出,本人也没有啥python学习教程可以分享,就不留啥联系方式了,如果有小伙伴对上面的有疑问,可以留言,我看到会回的。
最后,谢谢大家观看。


http://chatgpt.dhexx.cn/article/GC2QcBhS.shtml

相关文章

数据采集工具 -- Flume

1、Flume的定义 Flume由Cloudera公司开发,是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。Flume支持在日志系统中定制各类数据发送方,用于采集数据;Flume提供对数据进行简单处理,并写到各种数据接收方的能力。简…

PLC实时数据采集如何实现?

数据采集传输对于后续企业进行分析和决策是十分重要的,而实时数据采集更能提升整体生产的认识度,从而采取到更加及时高效的措施。因此PLC实时数据采集成为企业的基础应用,那么如何实现PLC的实时数据采集呢? 1、协议解析 协议解析…

实时数仓-数据采集层_1

实时数仓-数据采集层_1 一、实时数仓介绍1、普通实时计算与实时数仓比较2、实时电商数仓项目分层 二、实时需求概述1、离线计算与实时计算的比较2、实时需求种类2.1、日常统计报表或分析图中需要包含当日部分2.2、实时数据大屏监控2.3、数据预警或提示2.4、实时推荐系统 三、统…

低成本,高效率,更成熟的实时数据采集方案来了

现在,科技的发展正在飞速影响着各行各业的生产模式。其中物联网作为新技术载体,正在帮助各行业极大地释放数字化、智能化的空间。 物联网将信息网络连接和服务的对象从人扩展到物,让物流、金融、城市管理、能源勘探、工业制造等等领域复杂的业…

项目一实时数仓数据采集

目录 1. 项目介绍 1.1项目背景 1.2项目需求 1.3目标 1.4 二次开发 2. 项目部署 2.1业务数据采集 2.2 导入脚本编写和测试 2.3内容数据采集 2.3.1说明: 2.3.3 配置管理中心 2.3.4 注册域名 2.4 日志数据采集 2.4.1 nginx服务器的搭建 2.4.2 启动nginx&am…

【Oracle】准实时大规模数据提取

文中使用的Oracle版本为10g。 这篇文章是之前本人在前公司内部做可行性分析报告中的其中一个板块的内容,具体讲述的是为了做大规模数据提取和数据清洗做了一个试验demo。先说结论,一般来说像这种操作不应优先考虑关系型数据库去解决。本文中提到的采用J…

实时数据流采集工具Flume

实时数据流采集工具Flume 实时数据流采集工具Flume1.1 Flume的介绍1.2 Flume的特点1.3 Flume的功能架构1.4 Flume的功能原理1.5 Flume的安装部署1.6 Flume两种常见基础架构1.6.1 多路复用流Multiplexing The Flow1.6.2 Consolidation 1.7 Flume中常用的三大基础组件1.7.1 sourc…

必须了解的实时数据架构

随着互联网的发展进入下半场,数据的时效性对企业的精细化运营越来越重要, 商场如战场,在每天产生的海量数据中,如何能实时有效的挖掘出有价值的信息, 对企业的决策运营策略调整有很大帮助。此外,随着 5G 技…

puppeteer-0-大背景:服务端:生成图片 合成海报 截屏

背景 最近接手一个任务,大致要求就是可以动态合成图片。 没听懂?那我再解释下: 大致就是如上功能。 这个时候,会的,或者稍微会的,或者真的会的,就开会七嘴八舌了:吧唧吧唧.... 前…

小程序多张图片合成海报分享功能

项目有个需求:代言人模块分享出去时。需要合成几张图片作为一张海报分享出去 需要用到canvas组件,组件的部分合成图需要下载下来,所以后端要配置好下载合法域名如下图,配置ok后开发者工具会看到合法域名 代码逻辑 1、点击分享弹框…

php生成推广二维码海报、合成图片demo

php生成推广二维码海报、合成图片 1、海报背景图。背景图一般存服务器,程序本地读取; 2、推广二维码。可以是二维码图片链接,也可以是字符串图像流。如果自己生成二维码,详见phpqrcode官网,地址:https://sourceforge.net/projects/phpqrcode。 3、开启PHP的GD扩展 inde…

微信小程序海报生成图片合成工具类

背景 我目前参与小程序的产品研发,为了方便产品的转发和推广,会对课提供生成海报转发或者分享的功能,前期海报合成这个功能是由项目组的老同事负责开发,后来小程序海报这块功能需要单独做一个功能用于专门根据不同的课程类型来生…

平面设计新手如何用PS制作出一张合成海报

本文由:“学设计上兔课网”原创,图片素材来自网络,仅供学习分享 平面设计新手如何用PS制作出一张合成海报?本期教程给大家制作一张关于VR战争合成海报,从合成海报来讲我们要做到以下几点: 创意部分:如何通过创意表现产品功能或其他想要表现的点, 有了创意找到合适的…

小程序画布合成二维码海报图,并保存到相册

小程序画布合成二维码海报图,并保存到相册 实现效果如下图: 步骤分析 1,先获取需要合成的海报和二维码。 2,获取图片的本地路径,如果图片不是网络连接则不需要此操作。 3,通过手机型号,根据…

拿来就用的Java海报生成器ImageCombiner(一)

背景 如果您是UI美工大师或者PS大牛,那本文一定不适合你;如果当您需要自己做一张海报时,可以立马有小伙伴帮您实现,那本文大概率也不适合你。但是,如果你跟我一样,遇上到以下场景,最近公司上了不…

ps海报合成教程_怎样合成创意环保海报图片的PS教程

效果图合成的非常不错,作者用虚实结合的方法来表现主题。创作的时候先构思好想要的画面,然后搜集相关素材(没有的素材可以想办法自己拍摄),然后按自己思路溶图,润色即可。最终效果 一、拖入原素材,素材大家可以在网络上…

如何制作动态海报?教你一招在线合成GIF海报

相信大家在网上都见过静态海报吧!那么,当我们想要将静态的海报制作成炫目的动态海报来吸引大众的目光的时候,应该如何在线制作GIF动态海报呢?这时候,大家就可以使用**gif制作**工具,上传图片一键就可以在线…

设计素材|这些创意海报合成,你会发现创意比技术更重要!

是不是各位也同样收到过这样的话:“这次的海报还是缺点创意啊”、“再改改,润润色”; 想创意熬了三天,海报改了无数版,结果领导还是不满意。 随着设计行业竞争的日益激烈 公司对设计师的水平要求越来越高 如果你是…

怎样合成gif海报?手把手教你一键制作动态海报

相信不少新媒体小编们,在工作中会遇到需要自己设计海报的情况。如果是设计一般的静态海报使用一些修图软件就可以制作,但是当我们需要将这些静态海报变成gif动图海报的时候,应该如何制作gif动态图片海报呢?接下来,小编…

PHP使用Grafika合成图片,生成海报图

需求背景: 在小程序上生成海报图,但在保存图片时,只能保存其中的小程序码图片,保存下来的图片过于单调,且无法确认该图片的作用性,所以需要调整为保存一整张海报图。 海报效果图: 需求分析&a…