作者:星汇半岛车位销售 | 来源:互联网 | 2023-08-19 19:26
在写爬虫的时候,偶尔会碰到要爬取的网站或者app数据是通过websocket返回的,这时候,我们可以通过Python的 aiowebsocket这个库来进行爬取,下面是一个简单的示例代码,获取指定ws地址的数据并打印:
import asyncio
import logging
from aiowebsocket.converses import AioWebSocket
import json'''
pip install aiowebsocket
'''
async def startup(uri):async with AioWebSocket(uri) as aws:cOnverse= aws.manipulator# 客户端给服务端发送消息,这个 wsid 参数是自己通过分析抓包获取到的心跳参数await converse.send('{"wsid":1}')num=0while True:mes = await converse.receive()#这里我是采用的累计的5的倍数的时候,向服务端发送一次心跳,保持连接num+=1if num%5==0:await converse.send('{"wsid":1}')#如果获取到数据,就打印出来,我这里获取到的因为是json字符串,所以把它转换成了json打印if mes:msg=json.loads(str(mes, encoding="utf-8"))print(msg)if __name__ == '__main__':#要连接的websocket地址remote = 'wss://app.qkvoice.com/websocket?wsid=8e033c14-c329-4f23-87c2-dab8c17d3a0e'try:asyncio.get_event_loop().run_until_complete(startup(remote))except KeyboardInterrupt as exc:logging.info('Quit.')