pip install websocket
pip install websocket_client
某些对于实时性要求高的web使用的不是再试ajax轮询的方式来刷新数据,使用的是websocket,区别是
以往的ajax使用的轮询的方式,浏览器循环的定时向服务器请求数据,服务器返回数据,若请求的时间间隔非常小实时性会越高,但是对于服务器的开销非常大
而websocket的方式服务器可以主动推送数据给客户端,连接只需要建立一次,保持一个持久型连接的状态,只要在这个连接状态中,服务器都可以主动推送数据到客户端,省去了
客户端每次想服务器请求
服务器的开销更小,数据的实时性更高
websocket简而言之的web中的socket,普通的客户端和服务端socket也是建立在tcp的三次握手中传输数据,只是将其嵌入在了web中,以往的web都是请求应答的形式,而websocket是建立连接收发数据,http的方式虽然也是建立在tcp上,但是应用层http的机制就是定义的一问一答的方式
这些websocket用于web的聊天室,股票等数据实时性高的网站多
爬取莱特币网站的实时数据
使用两个线程,一收一发,全双工的方式
#coding:utf-8 import time,json from websocket import create_connection from threading import Thread url = 'wss://api.bbxapp.vip/v1/ifcontract/realTime' ws = create_connection(url) def recv_data(): while True: try: data = ws.recv() print('接收'+data+'\n') except Exception as e: print('连接异常:', e) time.sleep(3) continue def send_data(): info = json.dumps({"action":"subscribe","args":["QuoteBin5m:14"]}) ws.send(info) while 1: try: info = json.dumps({"action": "ping"}) ws.send(info) time.sleep(30) except Exception as e: print('连接异常:', e) time.sleep(3) continue T_list = [] T1 = Thread(target=recv_data) T2 = Thread(target=send_data) T1.start() T2.start() T1.join() T2.join()
可以看到获取的数据和网页中一致
看到数据使用的是json的数据格式,有的返回的就是普通的字符型,或者返回一个html标签信息,返回的数据会直接嵌入在html中