Python爬虫:Python+WebSocket获取体育实时赛事数据

这篇具有很好参考价值的文章主要介绍了Python爬虫:Python+WebSocket获取体育实时赛事数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python爬虫:Python+WebSocket获取体育实时赛事数据

苦于websocket的能跑的案例太少了,还没开始就要什么逆向,一来就是拦路虎,太折磨人了,无意间看了一个类似的文章并学习更新了,感谢大佬,对websocket有了一个新的认识。
python版本:Python爬虫:Python+WebSocket获取体育实时赛事数据

目标网站:http://m.611.com/

1、打开开发者工具(Ctrl+Shift+I)启用浏览器仿真器
Python爬虫:Python+WebSocket获取体育实时赛事数据
2、触摸启用仿真

将鼠标移到设备上可查看圆形“触摸”光标。这将对基于触摸的 JavaScript 事件( 如touchstart,touchmove和touchend)做出反应。鼠标特定的事件和 CSS 效果不会 做出反应。
按住Shift键,然后单击并移动鼠标以模拟双指缩放操作。
通过观察数据一段时间会变~
Python爬虫:Python+WebSocket获取体育实时赛事数据
没发现比分是怎么和球队怎么拼接而成,疑惑~
通过查看发现是基于websockt实时更新数据,接下来开始分析:
Python爬虫:Python+WebSocket获取体育实时赛事数据
3、参数分析:
{“command”:“RegisterInfo”,“action”:“Web”,“ids”:[],“UserInfo”:{“Version”:“[1667099935000]{“webkit”:true,“version”:“605.1.15”,“safari”:true}”,“Url”:“http://m.611.com/”}}
{“command”:“JoinGroup”,“action”:“SoccerLive”,“ids”:[303794138,303747120,303794153,303748872,303747117,303749323,303755706,303747122,303755264,303794150,303794144,303747115]}
{“command”:“JoinGroup”,“action”:“BasketSoccerLive”,“ids”:[303683091,303683092,303674542,303674543,303674544,303674545,303674546,303683093,303683094,303683096,303683097,303683098]}
通过多次刷新页面/更换浏览器得出结论:
第一条内容是连接服务器用的,action、ids、Url都是不变的,只有UserInfo里面内容是变化的,其中Version中括号里面是一个时间戳+000,后面加浏览器参数,那么只需要更改时间戳就可以了,浏览器参数直接复制就行。
第二、三条内容是加入群组用的,参数都是固定的,不需要改。

4、分析完发送的内容,后面就容易了,只需要再得到url就可以尝试连接了,返回headers界面,发现url后面加了一段字符串参数,字符串每次刷新后都不同,应该是js加密生成的,找js文件逆向太麻烦,先看看前面的请求有没有这个参数;
Python爬虫:Python+WebSocket获取体育实时赛事数据
直接复制f3fa2472b9db40f89bcf82c32e2357e6
ctrl+f搜索:
Python爬虫:Python+WebSocket获取体育实时赛事数据Python爬虫:Python+WebSocket获取体育实时赛事数据
发现这样GET不就可以了,太喜欢这样了,对刚开始学爬虫的小白我才能学的起走……

pip install websocket-client
开始写代码:

import requests

def get_token():
    # 获取token
    token_url = 'http://m.611.com/Live/GetToken'
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Referer': 'http://m.611.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }
    return requests.get(token_url, headers=headers, verify=False).json()['Data']

接着定义一个类,初始化url、websocket,具体代码如下:

import time
import websocket

class Leyu:
    def __init__(self):
        # 获取token
        self.token = get_token()
        # 初始化服务器地址
        self.ws_url = 'ws://push.611.com:6118/{}'.format(self.token)
        # 初始化websocket
        self.socket = websocket.WebSocketApp(
            self.ws_url,
            on_message=self.on_message,
            on_error=self.on_error,
            on_close=self.on_close,
            on_open=self.on_open
        )

    def login(self):
        # 向服务器发送连接信息
        msg = '{"command":"RegisterInfo","action":"Web","ids":[],"UserInfo":{"Version":"[' + str(int(time.time())) + '000' + ']\
        {\\"chrome\\":true,\\"version\\":\\"106.0.0.0\\",\\"webkit\\":true}","Url":"https://live.611.com/"}}'
        self.socket.send(msg)

    def join_group(self):
        # 向服务器发送入组信息
        msg1 = '{"command":"JoinGroup","action":"SoccerLive","ids":[]}'
        msg2 = '{"command":"JoinGroup","action":"BasketSoccerLive","ids":[]}'
        self.socket.send(msg1)
        self.socket.send(msg2)

    def on_message(self, ws, message):
        # 输出服务器推送过来的内容
        print(message)

    def on_error(self, ws, error):
        # 报错
        print('报错:', error)

    def on_close(self, ws, *args):
        # 关闭连接
        print("####### on_close #######")

    def on_open(self, *args):
        # 连接服务器
        self.login()
        print('连接成功!')
        self.join_group()

    def run(self):
        # 运行循环
        self.socket.run_forever()
if __name__ == '__main__':
    ly = Leyu()
    ly.run()

运行:其学习的过程中踩了不少的坑,能真正跑起的案例可唯是凤毛麟角。不知道是因为大佬们用的版本不一样,还是什么问题。
Python爬虫:Python+WebSocket获取体育实时赛事数据Python爬虫:Python+WebSocket获取体育实时赛事数据

Python爬虫:Python+WebSocket获取体育实时赛事数据
通过推测试一个列表字典里的分别为A队和B队的比分,分成了三个列表,然后实时更新数据。

另扩展:
连接websocket还有一个异步库可以用,aiowebsocket

import time
import websocket

import asyncio
import requests
import logging
import time
from aiowebsocket.converses import AioWebSocket

# 爬虫网址 http://m.611.com/


def get_token():
    # 获取token
    token_url = 'http://m.611.com/Live/GetToken'
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Referer': 'http://m.611.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }
    return requests.get(token_url, headers=headers, verify=False).json()['Data']


async def startup(uri):
    async with AioWebSocket(uri) as aws:
        converse = aws.manipulator
        # 向服务器发送消息
        await converse.send('{"command":"RegisterInfo","action":"Web","ids":[],"UserInfo":{"Version":"[' + str(int(time.time())) + '000' + ']\
        {\\"chrome\\":true,\\"version\\":\\"106.0.0.0\\",\\"webkit\\":true}","Url":"https://live.611.com/"}}')
        await converse.send('{"command":"JoinGroup","action":"SoccerLive","ids":[]}')
        await converse.send('{"command":"JoinGroup","action":"BasketSoccerLive","ids":[]}')
        while True:
            mes = await converse.receive()
            print(mes)
            print("================*================")


if __name__ == '__main__':
    token = get_token()
    remote = 'ws://push.611.com:6118/{}'.format(token)
    try:
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(startup(remote))
        # asyncio.get_event_loop().run_until_complete(startup(remote))
    except KeyboardInterrupt as exc:
        logging.info('Quit.')

总结:
整个过程其实就是分析,分析数据获取方式,分析链接,分析参数,代码写起来就比较容易了。这个网站貌似没什么反爬措施,作为一个练手的项目还是不错的。文章来源地址https://www.toymoban.com/news/detail-412225.html

到了这里,关于Python爬虫:Python+WebSocket获取体育实时赛事数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python网络爬虫-WebSocket数据抓取

    目录 前言 1、WebSocket请求的分析通常涉及以下几个方面: 2、利用WebSocket爬取数据 总结 最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!  博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作

    2024年04月27日
    浏览(41)
  • 如何用 python 获取实时的股票数据?

    Web爬取 Web爬取是指从网站上获取特定数据的过程。我们通常使用Python的Requests库来访问网站。网站会以HTML格式返回相应数据,我们需要使用Beautiful Soup库将HTML格式的数据转换为Python对象进行操作。 Python中,我们可以使用OpenPyXL库来读写Excel文件。使用OpenPyXL,我们可以创建、

    2024年02月20日
    浏览(87)
  • 基于SSM的面向高校校园体育用品租借管理系统+94593(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的面向高校校园体育用品租借管理系统被用户普遍使用,为方便用户能够可以随时进行微信小程序

    2024年02月22日
    浏览(46)
  • Python爬虫 | 利用python爬虫获取想要搜索的数据(某du)

    这篇文章主要介绍了利用Python爬虫采集想要搜索的信息(利用某du的接口实现)并且处理掉它的反爬手段,文中示例代码很详细,具有一定的学习价值,感兴趣的小伙伴快来一起学习吧。 大家在日常生活中经常需要查找不同的事物的相关信息,今天我们利用python来实现这一个

    2024年02月01日
    浏览(37)
  • 利用Python爬虫获取xx数据

    目录 一、前言 二、requests 请求库 1、requests 安装 2、requests 的基本使用 三、Beautiful Soup 1、Beautiful Soup 安装 2、BeautifulSoup对象介绍与创建 3、BeautifulSoup对象的find方法 四、总结 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,获取响应

    2024年03月20日
    浏览(46)
  • Python旅游景点数据大屏 爬虫+实时监控系统 旅游数据可视化 大数据 毕业设计

    1、系统功能 可视化: (1)数据可视化,实现中国地图、动态柱状图、饼图、环图、漏斗图等方式对数据库数据分析 (2)百度热力图展示景点销售数据 爬虫: **去哪儿网**热门景点数据爬虫,解析后存储入mysql数据库中 实现功能 (1)爬虫:爬取去哪儿网的热门景点数据,

    2024年02月13日
    浏览(48)
  • Python爬虫——Selenium在获取网页数据方面的使用

    目录 一、Selenium (一)引入  (二)启动浏览器 二、操作 (一)点击 (二)输入 三、数据获取 四、特点 五、抓取拉钩实例 六、其他操作 (一)窗口切换 代码 (二)操作下拉列表/无头浏览器 代码         一个电影票房的网站里,响应数据是一串完全看不懂的字符串

    2024年02月07日
    浏览(49)
  • 快乐学Python,数据分析之使用爬虫获取网页内容

    在上一篇文章中,我们了解了爬虫的原理以及要实现爬虫的三个主要步骤:下载网页-分析网页-保存数据。 下面,我们就来看一下:如何使用Python下载网页。 浏览器画网页的流程,是浏览器将用户输入的网址告诉网站的服务器,然后网站的服务器将网址对应的网页返回给浏览

    2024年01月17日
    浏览(51)
  • 【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据

    可以实战教爬虫吗,搭个环境尝试爬进去。尝试收集一些数据 一位粉丝想了解爬虫,我们今天从最基础的开始吧! 本文将介绍如何使用 Python 爬虫技术爬取新浪网首页的内容。新浪网作为一个内容丰富且更新频繁的新闻网站,是理解动态网页爬取的绝佳例子。 首先,确保你

    2024年02月04日
    浏览(50)
  • python爬虫之JS逆向基础小案例:网抑云数据获取

    嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 所用软件 解释器: python 3.8 编辑器: pycharm 2022.3 使用的模块 第三方模块: requests 数据请求 execjs pip install pyexecjs 内置模块(无需安装): nodejs 模块安装: win + R 输入cmd 输入安

    2024年01月20日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包