連接爲ws開頭的url Python爬取websocket數據過程示範

# 爬取之前必須 注意需要裝 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 總有功電度等數據。
在這裏插入圖片描述
爬出數據 從圖中可看出 我爬取成功了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章