使用 Python 3.x 在 websocket 流上进行网页抓取

Luc*_*016 1 python websocket web-scraping

我已经进行网络抓取很长时间了,最​​近决定通过 websocket 流抓取视频流。我完全理解 websockets 及其工作原理,但我不完全理解流媒体部分。我正在尝试使用 Python 3.10 获取 Base64 数据的流,当我尝试对其进行解码时,我发现它无法读取(正是因为它是来自视频流的数据)。我试图提取的流来自一家提供一些天气数据的公司,我需要获取这些数据,而无需使用 Selenium 或其他一些库进行测试。有什么有效的方法可以做到这一点吗?也许是一些性能良好的库,或者某种方式以某种方式从流中“读取”数据?

这是我从 websocket 获得的数据中得到的印象: 在此输入图像描述

即使尝试将获得的base64解码为utf-8后,结果也与上图相同。

use*_*831 8

我可以推荐这个包: https: //github.com/websocket-client/websocket-client

它非常简单、稳定,并且运行完美。它还支持异步。

def on_message(ws, message):
    ...

def on_open(ws):
    ...

def on_close(ws, close_status_code, close_msg):
    ...

def on_error(ws, error):
    ...

ws = websocket.WebSocketApp(
    "wss://<address>",
    on_open=on_open,
    on_message=on_message,
    on_error=on_error,
    on_close=on_close,
)
ws.run_forever()
Run Code Online (Sandbox Code Playgroud)

通常,当抓取 WS 时,您需要通过发送一些命令来启动该过程(您也可以通过开发工具跟踪它,该包将被标记为绿色向上箭头)。然后你可以使用它来重现它ws.send("<message>")