实战Python爬虫:WebSocket实时数据流抓取与解析(以股票行情为例)
很多爬虫初学者甚至中级开发者都会遇到一个困惑:明明用requests库模拟了所有请求头、cookies、代理,甚至破解了登录验证码,但仍然拿不到页面上的实时数据——尤其是股票行情、数字货币价格、体育比分这类时刻变化的数字。原因很简单:这些数据根本就不是通过传统的HTTP请求加载的。HTTP协议是“请求-响应”模型,客户端不主动问,服务器就不主动说。而股票行情这类场景要求数据一旦变化(比如某只股票从10.00元涨到10.01元),服务器必须毫秒级地推送给所有客户端。这个需求催生了WebSocket协议。WebSocket是一种全双工通信协议,它在TCP上建立一次握手连接后,客户端和服务器可以随时互相发送消息,不再需要反复建立连接。对于爬虫来说,这意味着:浏览器开发者工具里的Network标签看不到WebSocket消息内容(需要切换到Messages子标签)常见的requests、httpx、aiohttp都搞不定WebSocket你需要用专门的库,比如websockets(异步)或websocket-client(同步)本文会手把手带你写一个完整的WebSocket爬虫,从基础连接、心跳维持、消息解析、断线重连,到存储到数据库、部署到服务器。案例用的是某免费股票行情测试接口(模拟真实券商行情推送),所有代码均可直接运行。目录二、技术选型:为什么选这些库?Python版本核心依赖为什么不用selenium或playwright?三、理论基础:WebSocket协议细节(你能看懂的部分)3.1 握手与Upgrade头3.2 数据帧格式(OPCODE)四、实战第一步:连接一个公开的WebSocket行情接口4.1 最简单的WebSocket客户端五、实战第二步:完整功能股票行情爬虫(带心跳、自动重连、数据存储)5.1 项目结构5.2 数据模型定义 (models.py)5.3 日志配置 (logger.py)5.4 异步数据库写入 (db_writer.py)5.5 消息处理器 (message_handler.py)5.6 WebSocket核心客户端 (ws_client.py)5.7 主程序 (main.py)5.8 配置文件 (config.py)六、真实案例:对接某免费行情接口的适配指南6.1 富途牛牛API(国内免费额度)6.2 币安Binance WebSocket(币圈)七、性能优化:从每秒100条到每秒5000条7.1 批量写入数据库7.2 使用更快的JSON库7.3 避免在回调里创建过多Task八、部署与监控:让爬虫7x24小时稳定运行8.1 使用systemd管理(Linux)8.2 监控指标8.3 内存泄漏排查二、技术选型:为什么选这些库?Python版本Python 3.10+(推荐3.11或3.12,因为asyncio在不断优化)核心依赖库名用途版本websockets异步WebSocket客户端12.0+aiohttp偶尔配合HTTP REST接口(如获取token)3.9+orjson超快JSON解析(比标准json快3-5倍)