分享好友 最新动态首页 最新动态分类 切换频道
Python如何爬取实时变化的WebSocket数据
2024-12-30 02:52

作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图

Python如何爬取实时变化的WebSocket数据

Web 领域中,用于实现数据’实时’更新的手段有轮询和 WebSocket 这两种。轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 ‘实时’ 的效果,虽然看起来数据像是实时更新的,但实际上它有一定的时间间隔,并不是真正的实时更新。轮询通常采用 拉 模式,由客户端主动从服务端拉取数据。

WebSocket 采用的是 推 模式,由服务端主动将数据推送给客户端,这种方式是真正的实时更新。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket 优点

  • 较少的控制开销:只需要进行一次握手,携带一次请求头信息即可,后续只传输数据即可,相比 HTTP 每次请求都携带请求头,WebSocket 非常省资源。
  • 更强的实时性:由于服务器可以主动推送消息,这使得延迟变得可以忽略不计,相比 HTTP 轮询的时间间隔,WebSocket 可以在相同的时间内进行多次传输。
  • 二进制支持:WebSocket 支持二进制帧,这意味着传输更节省。
  • ……

爬虫面对 HTTP 和 WebSocket

Python 中的网络请求库非常多,Requests 是最常用的请求库之一,它可以模拟发送网络请求。但是这些请求都是基于 HTTP 协议的。在面对 WebSocket 的时候 Requests 就发挥不料作用了,必须使用能够连接 WebSocket 的库。

这里以莱特币官网 http://www.laiteb.com/ 实时数据为例。WebSocket 的握手只发生一次,所以如果需要通过浏览器开发者工具观察网络请求,则需要在打开页面的情况下,打开浏览器开发者工具,定位到 NewWork 选项卡,并输入或刷新当前页面,才能观察到 WebSocket 的握手请求和数据传输情况。这里以 Chrome 浏览器为例:

在开发者工具中提供了筛选功能,其中 WS 选项代表只显示 WebSocket 连接的网络请求。

这时候可以看到请求记录列表中有一条名为 realTime 的记录,鼠标左键点击它后,开发者工具会分为左右两栏,右侧列出本条请求记录的详细信息

与 HTTP 请求不同的是,WebSocket 连接地址以 ws 或 wss 开头。连接成功的状态码不是 200,而是 101。

Headers 标签页记录的是 Request 和 Response 信息,而 Frames 标签页中记录的则是双方互传的数据,也是我们需要爬取的数据内容

Frames 图中绿色箭头向上的数据是客户端发送给服务端的数据,橙色箭头向下的数据是服务端推送给客户端的数据。

从数据顺序中可以看到,客户端先发送

 

然后服务端才会推送信息(一直推送)

 

所以,从发起握手到获得数据的整个流程为

那么,现在问题来了

  • 握手怎么弄
  • 连接保持怎么弄
  • 消息发送和接收怎么弄
  • 有什么库可以轻松实现吗

Python 库中用于连接 WebSocket 的有很多,但是易用、稳定的有 websocket-client(非异步)、websockets(异步)、aiowebsocket(异步)。

可以根据项目需求选择三者之一,今天介绍的是异步 WebSocket 连接客户端 aiowebsocket。其 Github 地址为:。

ReadMe中介绍到: AioWebSocket是一个遵循 WebSocket 规范的 异步 WebSocket 客户端,相对于其他库它更轻、更快。

它的安装和其他库一样简单,使用 即可。安装好后,我们可以根据 ReadMe 中提供的示例代码来测试

 

运行后的结果输出为

 

send 表示客户端向服务端发送的消息

recive 表示服务端向客户端推送的消息

回到这一次的爬取需求,目标网站是莱特币官网

从刚才的网络请求记录中,我们得知目标网站的 WebSocket 地址为:,从地址中可以看出目标网站使用的是 wss,也就是 ws 的安全版,它们的关系跟 HTTP/HTTPS 一样。aiowebsocket 会自动处理并识别 ssl,所以我们并不需要作额外的操作,只需要将目标地址赋值给连接 uri 即可

 

运行代码后观察输出,你会发现什么都没有发生。既没有内容输出,也没有断开连接,程序一直在运行,但是什么都没有

这是为什么呢

是对方不接受我方的请求吗

还是有什么反爬虫限制呢

实际上,刚才的流程图可以解释这个问题

整个流程中有一步是需要客户端给服务端发送指定的消息,服务端验证后才会不停推送数据。所以,应该在消息读取前、握手连接后加上消息发送的代码

 

保存后运行,就会看到数据源源不断的推送过来

到这里,爬虫就能够获取到想要的数据了。

aiowebsocket 做了什么

代码不长,使用的时候只需要将目标网站 WebSocket 地址填入,然后按照流程发送数据即可,那么 aiowebsocket 在这个过程中做了什么呢

  • 首先,aiowebsocket 根据 WebSocket 地址,向指定的服务端发送握手请求,并校验握手结果。
  • 然后,在确认握手成功后,将数据发送给服务端。
  • 整个过程中为了保持连接不断开,aiowebsocket 会自动与服务端响应 ping pong。
  • 最后,aiowebsocket 读取服务端推送的消息

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python必备开发工具

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试宝典

最新文章
excel 区域内按行排序_在Excel 2010中对行进行排序
Most of the time when you're sorting in Excel, you sort based on the values in one or more columns. If your workbooks are like mine, it's rare that you sort horizontally, based on the values in a row. But if you ne
c编程向计算机发送数据,一文读懂一台计算机是如何把数据发送给另一台计算机的...
这是之前一篇文章的修订版,感觉是一篇很不错的文章,重新修改排版了下。前言天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够准确着寻找到另外一台计算机,并且把数据发送
CTF 工具 集合
From:Hello CTF:在学习CTF前希望您具备一些CS领域的基础知识,这里推荐您先阅读 JANlittle师傅写的CS入门资料 ( 点此跳转 ) 大致具备CS领域的基本技能后再开始CTF的学习。 入入入入门(fén)综述࿱
AI小助手使用指南:涵盖TV版操作与百度AI小助手应用教程
在这个科技日新月异的时代人工智能()正在逐步渗透到咱们生活的各个角落从智能手机、智能家居到智能电视等设备。小助手作为人工智能技术的产物它能帮助我们更高效地完成日常任务如播放音乐、查询天气、设置闹钟等,甚至可以成为我们的生活
08山东电视台公共频道节目推介暨广告年会直播
12月2日19:00时现场直播2008山东电视台公共频道节目推介暨广告年会  【大片头】  【新闻女生组推介板块】  1、 开场歌舞:《魅力》2’40  表演:七名新闻女生  伴舞:20男生  【主持人开场】孙亮 郭培鑫  【《新闻女生组》
Android 的开源电话/通讯/IM聊天项目全集
一、Android的XMPP客户端 BeemBeem 是一个运行于 Android 手机平台的 XMPP (jabber) 的客户端软件,兼容标准的 XMPP 服务器和服务,例如 Ejabberd, Openfire, Facebook, 和 Gmail). 支持 SASL, 代理(Socks4, Socks5, HTTP), DNS SRV, and c
ai智能机器人源码定制开发快速搭建送服务器
聊天机器人chatai*近推出了一款新产品——-Lisa,它能帮助人们更好地交流和分享想法。这款软件目前还在测试阶段,已经有很多人使用过了。1:chat在线聊天机器人的开发背景随着移动互联网的发展,智能手机已经成为人们生活中不可或缺的工具
AI智能生成文字Logo:一站式解决个性化标识设计需求
在数字化浪潮的推动下形象已成为企业竞争力的关键组成部分。一个独有、个性化的标识不仅可以吸引消费者的目光还能传递企业的核心价值。传统的标识设计往往需要耗费大量时间和精力且难以满足个性化需求。如今智能生成文字Logo的出现为解决这
BTS WORLD
【基本介绍】『一睁眼竟是2012年,而且我还成了Big Hit的职员?!在BTS还没出现的世界,我成为了BTS的经纪人。现在他们能否出道,全看我了!』难道就是追星的最高境界?我还能回到原来的世界吗?如同梦境一般在眼前展开的的神秘故事,现在
Autodesk Maya 2023 for Mac 正版激活永久使用(支持M1)
兼容M1的Autodesk Maya 2023 终于更新啦!!玛雅是专业的三维动画设计工具,这次的maya2023中文版引入Blue Pencil,它取代了现有的油性铅笔工具,提供更多用于文本和形状的绘图工具,以及用于注释的图层系统,另外还更新了布尔建模、拓扑工
相关文章
推荐文章
发表评论
0评