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