# 爬取之前必须 注意需要装 2 个 包
pip install websocket
pip install websocket-client # 这个虽然在代码表面中没用,但是这个包不能少
适用于任何版本
先分析要求
1 如何鉴别 所爬取数据为websocket数据,也就是 时时数据。
首先 按 f12 查看网页源码,选中 netwoek ,清空(clear),选中WS,如图所示
之后 刷新网页,发现WS中还有数据,那说明,你爬取的数据为Websocket时时数据。
如图所示
2 首先要确认的一点,socket连接 建立后是要先向服务器发送一条数据,等服务器回复,之后再建立的基础上再发(向服务器),服务器再回复数据的过程。
所以要先向服务器发送数据,(每个爬取的url不同,所起始发的数据也不同,这些都可以通过浏览器的 WS下的显示可读取,socket连接是需要时间的所以要在WS这个见面等待1-3分钟 看规律)
所以 我爬取的数据 起始发的数据为
‘201500010409[7]Net1.briLeModbus.18401646297__江苏_分区2_变压器___@总有功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@总无功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月有功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月无功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月最大负荷,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@历史最大负荷,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@历史最大漏电流,Net1.briLeModbus.18401646297__江苏_分区2_变压器___#设备通讯状态’
之后向服务器发送的数据为
201500110000
如下图
具体代码如下 因为是公司后台所以URL连接不能给大家共享,但是 开头都是WS之类的,这点我没写错。
import time
from websocket import create_connection
url = 'ws://xxx.xxx.xx.xxxx:xxxx/'
while True: # 一直链接,直到连接上就退出循环
time.sleep(2)
try:
ws = create_connection(url)
ws.send(
'201500010409[7]Net1.briLeModbus.18401646297__江苏_分区2_变压器___@总有功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@总无功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月有功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月无功电度,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@当月最大负荷,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@历史最大负荷,Net1.briLeModbus.18401646297__江苏_分区2_变压器___@历史最大漏电流,Net1.briLeModbus.18401646297__江苏_分区2_变压器___#设备通讯状态')
break
# 连接建立就退出
except Exception as e:
print('连接异常:', e)
continue
while True: # 连接上,退出第一个循环之后,此循环用于一直获取数据
ws.send('201500110000')
response1 = ws.recv()
print(response1,"返回的数据")
# 这里数据处理和截取就不讲了 ,要求不同处理不同
数据演示
想爬数据为 905812 总有功电度等数据。
爬出数据 从图中可看出 我爬取成功了。