WebSocket爬虫
一:WebSocket
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。,被广泛应用于对数据实时性要求较高的场景,如体育赛事播报、股票走势分析、在线聊天等。
在WebSocket协议未出现之前,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯
二:WebSocket握手协议
与HTTP协议不同的是,WebSocket协议只需要发送一次连接请求。请求的完整过程被称为握手,即客户端为了创建WebSocket连接而向服务器发送特定的HTTp请求并声明升级协议。WebSocket 是独立的、创建在 TCP 上的协议,通过HTTP/1.1 协议的101状态码进行握手,握手成功后才会转为WebSocket协议。
WebSocket通信过程:
客户端发起握手请求
服务器端收到请求后验证并返回握手结果
连接建立成功,服务器端开始推送消息
三:websocket发送数据
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连接、发送消息、接收消息。
ws的应用在即时性较强的信息传播行业,如股票、彩票、赛事、通信中用的很普遍,但是其难度并不大。
WebSocket爬虫相关推荐
- websocket 爬虫
前言 有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据.数据货币交易数据等.关于websocket的机制,网上不乏相关资料.但关于websocket的爬虫文 ...
- Python websocket爬虫
有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据.数据货币交易数据等.关于websocket的机制,网上不乏相关资料.但关于websocket的爬虫文章,还 ...
- python websocket爬虫_Python如何爬取实时变化的WebSocket数据
一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变化的数据.如下图: Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSo ...
- python websocket爬虫_详解python websocket获取实时数据的几种常见链接方式
第一种, 使用create_connection链接,需要pip install websocket-client (此方法不建议使用,链接不稳定,容易断,并且连接很耗时) import time f ...
- python websocket爬虫_python爬虫----爬取阿里数据银行websocket接口
业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 最终获取页面: 页面获取情况如下: 绿色的就是我们需要模拟的 ...
- 爬虫之websocket数据爬取
收集了大家的问题.我又重新写了一篇websocket的代码,并添加了注释,在文章最后.希望可以解决大家遇到的问题- websocket是最近开发很常用的技术之一,他可以一直保持着连接不断,但是你的页面 ...
- 前端周报:最经典的26个JavaScript面试题和答案;Vue3.0
1.2018年,最经典的26个JavaScript面试题和答案 根据 Stack Overflow 的 2018 年度调查,JavaScript 连续六年成为最常用的编程语言.所以我们必须面对这样的现 ...
- 网络安全职业_我如何开始网络安全职业
网络安全职业 Throughout my career as a cybersecurity professor, I often get questions about starting a car ...
- 网络安全ai能力建设_人工智能对网络安全的影响
网络安全ai能力建设 Artificial intelligence (AI) and machine learning (ML) have shown significant progress in ...
最新文章
- Linux环境HBase安装与使用
- Windows内核HAL相关学习
- map反转key value
- 通过Java代码打开浏览器,本地文件目录以及ftp站点
- 算法--排序--大小写字母数字分离(桶排序思想)
- centos服务端ftp的搭建_centos下搭建ftp服务器
- LeetCode 852. Peak Index in a Mountain Array
- proteus 7.8下载链接
- Android Studio内置JDK源码关联和断点错乱问题解决
- 关于 flex 的资料
- 通俗地讲解傅立叶分析和小波分析间的关系
- pycharm无法创建虚拟环境Virtualenv(Directory ...\python not found)
- Python tkinter(GUI编程)模块最完整讲解(下)
- Keep悦动圈竞品分析报告(2)
- 小程序:获取页面高度问题
- 修改Linux中发送邮件中附件大小的限制
- 解决删除chrome注册表残留问题
- 异步mysql java_java – 异步http客户端(ning)创建更多线程?
- web前端布局练手项目
- Hartree-Fock理论(更新中)
热门文章
- Python-面向对象特性
- 如何在工作中鼓励持续的反馈
- 管易云与金蝶云星空对接集成盘点单查询连通物料盘点作业新增(改GK管易盘点对接金蝶盘点)
- Windows系统下解压.tar文件出错,提示:无法创建符号链接,可能需要以管理器身份运行winrar
- SIM卡的ICCID、IMSI
- 腾讯QQ手机浏览器内核开放
- JS 自定义用setTimeout 实现 setInterval功能
- 【Vue】小黑记事本
- 如何利用电位器控制舵机
- 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 003第二关:点击绿色按钮100下