websocket python爬虫_python实现基于websocket协议的网络爬虫
WebSocket是一種在單個TCP連接上進行全雙工通信的協議,簡單來說就是建立一個TCP長連接之后,你可以服務器隨時可以給客戶端發送消息,客戶端隨時可以給服務器發送消息,而以前只能是客戶端給服務器發送消息,服務器返回消息。
websocket協議我們簡稱為ws,ws的網絡爬蟲其原理和普通爬蟲沒有其他區別,都是模擬客戶端與服務器進行對話,不同的是我們要用到websocket庫。
測試網址是websocket官網提供的demo,demos.kaazing.com/echo/index.html
我們抓包看看ws協議的通信特點:
一次連接雙向通信,在瀏覽器開發者工具中,點擊ws數據包在彈出的詳情中點擊Frames,這里面是通信的數據。知道了大致的工作原理以后我們來實現一個簡單的無驗證、無加密內容的ws爬蟲,目標網址還是上面那個。
我們實現和目標網址之前的數據交互,常見方法如下:
# -*- coding:utf-8 -*- import websocket url = 'ws://demos.kaazing.com/echo'ws = websocket.create_connection(url=url, timeout=15) ws.send('以字符串發送數據') # 以字符串發送消息ws.recv() # 接收消息,如果無消息將會堵塞,直到15s超時等待結束 ws.send_frame('以幀形式發送數據') # 以幀形式發送數據ws.recv_data_frame() # 接收以幀發送的數據 ws.send_binary('以二進制格式發送數據'.encode()) # 以二進制格式發送數據 ws.send_close() # 向服務器發送關閉連接請求,傳入狀態碼及其原因 ws.close() # 關閉連接 ws = websocket.create_connection(url=url, timeout=15)ws.send('以字符串發送數據')30ws.recv()'以字符串發送數據'ws.send_frame('以幀形式發送數據')8data = ws.recv_data_frame()data(8, )data[1].datab'\x03\xea'
看似很簡單,但在實際中會伴隨著很多通信的加密,這個需要在具體問題中具體分析,主要就三個方面:建立ws連接、發送消息、接收消息。
ws的應用在即時性較強的信息傳播行業,如股票、彩票、賽事、通信中用的很普遍,但是其難度并不大。
總結
以上是生活随笔為你收集整理的websocket python爬虫_python实现基于websocket协议的网络爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python输出日期的模版_python
- 下一篇: mysql 社区版 阿里云_Mysql各