精华内容
下载资源
问答
  • Python—WebSocket爬虫实战

    千次阅读 2020-03-11 17:09:46
    1.WebSocket

    1. WebSocket

      WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。,被广泛应用于对数据实时性要求较高的场景,如体育赛事播报、股票走势分析、在线聊天等。

      在WebSocket协议未出现之前,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

      在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

    2. WebSocket握手协议

      与HTTP协议不同的是,WebSocket协议只需要发送一次连接请求。请求的完整过程被称为握手,即客户端为了创建WebSocket连接而向服务器发送特定的HTTp请求并声明升级协议。WebSocket 是独立的、创建在 TCP 上的协议,通过HTTP/1.1 协议的101状态码进行握手,握手成功后才会转为WebSocket协议。

      WebSocket通信过程:

    1. 客户端发起握手请求
    2. 服务器端收到请求后验证并返回握手结果
    3. 连接建立成功,服务器端开始推送消息

    3. WebSocket爬虫实战

    1.爬虫目标

      本次抓取的目标网站是乐鱼体育的足球比分页,该页面会实时展示比分更新数据。

    2.网页分析

    1.打开开发者模式,我们检查网页源代码会发现,源代码中并没有我们想要的比分数据。

    2. 那么是否是使用AJAX请求来更新数据?但是通过观察,比分一直在更新但并没有新的AJAX请求发出。说明该网站并不是使用轮询的方式更新数据。

    3. 所以,该网站数据的实时更新应该是使用websocket协议。我们点开【WS】,会发现服务器一直在传输新的信息。这些信息就是我们需要的数据。

    4. 将这条请求翻到最上方,我们会看见三条客户端请求服务器端的绿色请求信息,也就是验证信息message。并且经过重复刷新观察,只有其中一条请求有参数变化,且其参数是毫秒级的时间戳,需要我们手动构造。

    5. 查看该条请求的url,会发现其路由地址包含一串加密字符串token。通过寻找发现在请求过程中,有这样一条AJAX请求恰好返回了该token。


    6. 现在所有的参数我们都已经直接或间接获取到。这样我们就可以着手开始使用代码模拟websocket请求获取数据了。

    3.代码实现

    请注意:
      引入的websocket模块并不是需要下载安装websocket模块(pip install websocket)。而是需要下载安装websocket-client模块。如果你下载了websocket,请卸载!!!

    import requests
    import websocket
    import json
    import time
    import math
    
    
    def getToken():
        """
        获取加密字符串,将其拼接到websocket协议的url上
        :return: token
        """
        url = "https://live.611.com/Live/GetToken"
        response = requests.get(url)
        if response.status_code == 200:
            data = json.loads(response.text)
            token = data["Data"]
            return token
        else:
            print("请求错误")
    
    
    def get_message():
        """
        构造websocket的验证信息
        :return: message1,message2
        """
        _time = math.floor(time.time()) * 1000
        info = {'chrome': 'true', 'version': '80.0.3987.122', 'webkit': 'true'}
        message1 = {
            "command": "RegisterInfo",
            "action": "Web",
            "ids": [],
            "UserInfo": {
                "Version": str([_time]) + json.dumps(info),
                "Url": "https://live.611.com/zq"
            }
        }
        message2 = {
            "command": "JoinGroup",
            "action": "SoccerLiveOdd",
            "ids": []
        }
        return json.dumps(message1), json.dumps(message2)
    
    
    def Download(token,message1,message2):
        """
        抓取数据
        :param token: token
        :param message1: message1
        :param message2: message2
        :return: 
        """
        uri = "wss://push.611.com:6119/{}".format(token)
        ws = websocket.create_connection(uri, timeout=10)
        ws.send(message1)
        ws.send(message2)
        while True:
            result = ws.recv()
            print(result)
    
    if __name__ == '__main__':
        token = getToken() # 获取token字符串
        message1, message2 = get_message() # 构造请求信息
        Download(token,message1, message2) # 抓取数据
    

    参考资料:菜鸟教程
    思路来源:《Python3 反爬虫原理与绕过实战》---- 韦世东 著

    展开全文
  • python破解websocket加密爬虫

    千次阅读 2020-01-21 08:58:04
    查找相应的js文件,通过对websocket的熟悉,可以在js中搜索相关关键字,onopen 然后在script js中找到相关信息 断点调试,进入到这里 通过debug来到这里,发现向服务器send了一串数据,打印数据可以发现 ...

    进入正题

    进入网站 https://www.fmz.com/robot/171548
    可以发现,该网站,每隔几分钟就会发布一条币种信息
    在这里插入图片描述
    通过对该网站研究和抓包,对这种即时信息的发布,可以怀疑请求是wss,可以在wss请求中找到对应的内容,但是该网站wss返回的信息确实看不懂的信息
    在这里插入图片描述

    解决方法

    对这种信息,可以怀疑浏览器解码不了,因此也可以使用其他抓包软件比如fiddle,去抓取该wss信息,然后
    查看内容,结果也是看不懂的信息。因此怀疑返回的数据需要进行解密或者其他方式
    通过进一步查看该wss网址,wss://www.fmz.com/ws_botvs_v1?compress=zlib
    可以发现,后面compress=zlib,压缩=zlib。因此对返回的数据可以尝试进行zlib解压缩得到

    分析websocket send发送过去的数据

    查找相应的js文件,通过对websocket的熟悉,可以在js中搜索相关关键字,onopen 然后在script js中找到相关信息

    断点调试,进入到这里

    通过debug来到这里,发现向服务器send了一串数据,打印数据可以发现
    在这里插入图片描述

    打印数据

    在这里插入图片描述
    发现主要是通过for循环向服务器发送2次一串的data数据,打印后可以得到这样的字符串。

    尝试写代码,向服务器发送同样的字符串

    这里需要注意的几点是

    • 在网页请求中,调试可以看出,send发送的是二进制数据,所以websocket应该用send_binary方法
    • 同时,发送的应该是元素是整数的列表
    • 最后发送byte类型的数组过去
    • 发送了2个data数据,测试只需要发送一个data就可以获得数据

    简单贴上代码

    headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
        }
        url = 'wss://www.fmz.com/ws_botvs_v1?compress=zlib'
        ws = websocket.create_connection(url, timeout=10, headers=headers)
    
    
        b = "120,156,101,142,65,11,194,48,12,133,255,75,206,69,218,233,152,244,170,32,130,120,208,227,40,210,214,176,150,117,171,180,213,131,226,127,55,14,189,40,185,124,121,121,121,201,3,6,44,46,158,65,182,176,193,114,136,38,150,53,22,237,3,48,56,94,77,182,201,27,156,100,18,190,142,93,236,50,40,6,23,157,244,144,105,183,21,141,168,23,75,197,126,129,241,169,42,254,1,193,249,31,214,162,34,84,148,23,244,216,129,132,187,59,173,246,116,174,196,30,71,234,9,173,182,14,65,242,55,133,96,180,237,183,244,51,8,26,221,48,101,31,201,55,159,53,207,23,52,75,58,244"
        b = [int(i) for i in b.split(",")]
        ws.send_binary(bytes(b))
        content_compress = ws.recv()
        content = zlib.decompress(content_compress)
        print(content.decode())
    

    最后得到结果

    在这里插入图片描述

    展开全文
  • websocket爬虫

    2018-02-05 09:35:53
    原文来自websocket爬虫 背景 写爬虫的目的应该就是为了拿到数据,或者说模拟某种操作 如果他使用的是http(s) 协议来传输数据的,那么我们就模拟http协议来发送数据 如果它使用的是websocket协议来传输数据的, ...

    原文来自websocket与爬虫

    背景

    写爬虫的目的应该就是为了拿到数据,或者说模拟某种操作 如果他使用的是http(s) 协议来传输数据的,那么我们就模拟http协议来发送数据 如果它使用的是websocket协议来传输数据的, 那么我们理所当然的就模拟websocket来发送数据~

    首先,我们需要了解什么是websocket

    websocket的介绍

    WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

    上面是维基百科的介绍. 简单的将,websocket 和http一样,都是一种网络传输协议

    他比http协议好的地址有哪些呢?

    • 较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。
    • 更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
    • 保持连接状态。于HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
    • 更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
    • 可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
    • 更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

    websocket的应用场景

    • 直播平台的弹幕
    • 实时聊天
    • 等等

    websocket 协议

    WebSocket 是独立的、创建在 TCP 上的协议。

    Websocket 通过 HTTP/1.1 协议的101状态码进行握手。

    为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”

    那么websocket协议是如何握手的呢?

    websocket握手

    下面是websocket一次握手的过程 客户端请求

    GET / HTTP/1.1
    Upgrade: websocket
    Connection: Upgrade
    Host: example.com
    Origin: http://example.com
    Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
    Sec-WebSocket-Version: 13
    复制代码

    服务器响应

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
    Sec-WebSocket-Location: ws://example.com/
    复制代码

    和http字段不一样的地方

    • Connection必须设置Upgrade,表示客户端希望连接升级。
    • Upgrade字段必须设置Websocket,表示希望升级到Websocket协议。
    • Sec-WebSocket-Key是随机的字符串,服务器端会用这些数据来构造出一个SHA-1的信息摘要。把“Sec-WebSocket-Key”加上一个特殊字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后计算SHA-1摘要,之后进行BASE-64编码,将结果做为“Sec-WebSocket-Accept”头的值,返回给客户端。如此操作,可以尽量避免普通HTTP请求被误认为Websocket协议。
    • Sec-WebSocket-Version 表示支持的Websocket版本。RFC6455要求使用的版本是13,之前草案的版本均应当弃用。
    • Origin字段是可选的,通常用来表示在浏览器中发起此Websocket连接所在的页面,类似于Referer。但是,与Referer不同的是,Origin只包含了协议和主机名称。
    • 其他一些定义在HTTP协议中的字段,如Cookie等,也可以在Websocket中使用。

    可以看到只是在http协议上增加了几个硬性规定,http协议的user-agent,cookie都可以在websocket握手过程中使用

    抓包时候的注意事项:因为websocket只有一次握手,握手成功后就可以双方发送消息了,假如你打开网页后没有找到你要抓的数据,那么你就需要重新刷新网页,让他重新握手一次

    websocket的事件

    on_open

    表示刚刚连接的时候

    onmessage

    表示收到消息怎么做

    send

    表示给服务器发送消息

    on_close

    表示关闭连接

    那么知道了这些对我们有什么好处么? 找js的时候会很好找,这几个关键词基本上都是固定的 你可以直接全局搜搜,然后很容易能找到发送的js代码

    模拟发送的时候也是一样的.

    实际案例

    前面介绍了一堆websocket协议相关的东西,估计很多人已经晕了. 没关系,先看实例,有问题再回到上面看

    抓包可以使用fiddle,chrome也是可以的

    我们先使用chrome

    本次要抓的网站的一个投票网站 大家可以先随便投一个票,抓抓包看看 会发现怎么没有找到他是如何提交数据的...

    选择ws,然后刷新下网页,再点击下投票,会发现有一个请求

    可以看到是在握手阶段,请求头里面的参数和我们上面讲的是一样的.

    请求地址是ws://v5.10brandchina.com:8008/ 这边顺带说一下,有时候这边会看到 wss://v5.10brandchina.com:8008/ 那么这两个有啥区别的,简单的讲就是http与https协议的区别一样...

    看一下交互的内容(点击Frames) 可以看到已经有四条消息了,但是消息内容是二进制的,chrome这边无法预览... 那么我们使用fiddle试一下

    抓包与分析

    打开fiddle,刷新一下网页 不刷新的话是看不到的,然后随便投一下票.

    怎么找到请求呢,很简单,看状态码为101的就行,然后双击这一行

    然后这边还是看到四条消息,我们点击第一条,然后用TextView展示,可以看到消息是这些 为啥用TextView呢?其实是一个一个的试过来的,假如你发现都试过了,还是乱码,那应该是他使用了其他的压缩或者加密方法,需要查看js看看他是如何加密的

    这个网站的数据是没有加密过的. 带向上的箭头的是我们向服务器发送的,向下的箭头是服务器返回的(下面的数据,前面带黑点?,是我们发送的)

    • {"action":"auth","val":5}

    {"action":"auth","msg":"eval(\"\\115\\141\\164\\150\\56\\163\\151\\156\\50\\61\\65\\61\\67\\67\\66\\62\\63\\61\\63\\51\")"}

    • {"action":"auth","val":-0.3241458910493796}

    {"action":"wait","msg":95420}

    • {"action":"vote","val":"{\"itemid\":126067,\"catid\":41867,\"captcha\":\"%u7EC7%u65E7%u5F88%u9C7C\",\"auth\":5,\"rnd\":\"4186712606754595\"}"}

    {"action":"vote","msg":"ok,231812,2018-02-04 22:32:55"}

    可以看出来 首先我们发送{"action":"auth","val":5} 然后服务器返回一串信息给我们, 然后我们根据服务器返回的算出一个值,也就是 {"action":"auth","val":-0.3241458910493796} 再发送给服务器. 服务器返回{"action":"wait","msg":95420},表示验证通过 然后我们投票,发送了投票的一些信息给服务 服务器告诉我们投票成功.

    以上就是整个通讯过程.

    那如果我们要模拟发送的话,需要知道哪些信息呢

    1. {"action":"auth","val":5}里面的val:5,这个5是固定的么?如果不是,是如何生成的
    2. 服务器返回的是什么,如何解析
    3. 如何根据服务器返回的生成一个新的val
    4. 发送投票信息里面{"action":"vote","val":"{\"itemid\":126067,\"catid\":41867,\"captcha\":\"%u7EC7%u65E7%u5F88%u9C7C\",\"auth\":5,\"rnd\":\"4186712606754595\"}"} itemid,catid,capthc,auth,rnd如何生成

    找参数

    还是使用chrome,直接用ctrl + shift +f,然后输入websocket(或者on_open,on_message,等等上面提到的事件去搜索)

    运气很好,输入websocket直接就搜到了js,还是没有混淆的

    首先发现 websocket 地址是根据catId变的,如果catId能被2整除则地址为xxx,否则为xxx 那么catId是什么呢,调试发现就是url中的id,我们当前url为http://www.10brandchina.com/vote/startin.php?id=41867则 catId为41867

    然后onmessage也看到了,大概意思是收到信息后,用json解析,如果action是auth的话,则调用sendData这个方法,如果action是vote的话,则使用vote_resule方法.

    在看到onopen方法,是调用sendData,并发送('auth',authType),在这边是不是联想到前面,我们第一次发送的数据?{"action":"auth","val":5},是不是感觉一模一样

    close方法就不说了,反正我们也用不上

    再看看sendData这个方法,

    用python实现的话是这样

    再看vote_result方法,大概作用是判断投票结果

    所有的方法我们都找到了,那么我们再和之前要找的参数走一遍.

    1. {"action":"auth","val":5}里面的val:5,这个5是固定的么?如果不是,是如何生成的

    这个5也就是onopen里面的authType,至于authType是不是固定的,搜索一下就知道了.

    1. 服务器返回的是什么,如何解析
    2. 如何根据服务器返回的生成一个新的val

    可以通过onmessage方法知道他返回的json数据,json解析一下就行, 里面的val是通过执行 eval(val)得到的 所以你也可以直接执行这个.或者用python实现

    1. 发送投票信息里面{"action":"vote","val":"{\"itemid\":126067,\"catid\":41867,\"captcha\":\"%u7EC7%u65E7%u5F88%u9C7C\",\"auth\":5,\"rnd\":\"4186712606754595\"}"} itemid,catid,capthc,auth,rnd如何生成

    itemid 就是你投票的公司的id,catid之前讲过,captcha就是验证码, auth和上面的authtype一样 rnd是通过搜索js发现了.

    再看看验证码是如何生成的呢

    检查验证码是否正确

    我们已经拿到所有需要的东西了,只要用程序模拟发送就行了.

    模拟发送

    使用的包是websocket

    官方demo

    import websocket
    try:
        import thread
    except ImportError:
        import _thread as thread
    import time
    
    def on_message(ws, message):
        print(message)
    
    def on_error(ws, error):
        print(error)
    
    def on_close(ws):
        print("### closed ###")
    
    def on_open(ws):
        def run(*args):
            for i in range(3):
                time.sleep(1)
                ws.send("Hello %d" % i)
            time.sleep(1)
            ws.close()
            print("thread terminating...")
        thread.start_new_thread(run, ())
    
    
    if __name__ == "__main__":
        websocket.enableTrace(True)
        ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                                  on_message = on_message,
                                  on_error = on_error,
                                  on_close = on_close)
        ws.on_open = on_open
        ws.run_forever()
    复制代码

    可以看到使用还是很简单的,也是onopen,onmessage,send

    所以我们只要用我们上面得到的信息就行模拟发送就可以了

    因为是投票网站,所以不提供代码...有啥问题,请留言~

    转载于:https://juejin.im/post/5a782532f265da4e8123813b

    展开全文
  • 这个时候传输的弹幕消息已经没有加密过,直接对比,看到了一条“哈哈哈”的消息,所以我们现在可以确定就是这个websocket连接在传输相关消息。 依葫芦画瓢,我们尝试用Python来连接 Curl: curl  'wss://mbgows.plu....

    我是个宅男,喜欢看很多人直播,以前可以看一天直播不出门。现在主要看这么些主播,虎牙的韦神、Dopa,斗鱼的狗贼嘘嘘。

    对于其中的弹幕文化,非常感兴趣,就研究下,发现弹幕是用WebSocket实现的,那首先来说说什么是WebSocket。

    WebSocket是什么

    详细内容可以看看这个问题 https://www.zhihu.com/question/20215561

    简单解释下:

     HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。

     这种通信模型有一个弊端:HTTP 协议无法实现服务器主动向客户端发起消息。大多数 Web 应用程序将通过频繁的异步JavaScript和XML(AJAX)请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

     WebSocket的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息。 

    WebSocket 如何工作

    一个非常典型的WebSocket创建方式如下(来自某巨头):

    function r({
        if (!d) {
            var t = i();
            I.info("%cconnecting " + t, p("#0000E3")),
                u = new WebSocket(t),
                u.onopen = n,
                u.onclose = o,
                u.onerror = a,
                u.onmessage = h
        }
    }

    WebSocket获取龙珠直播弹幕

    本次使用的Python第三方库是 https://github.com/websocket-client/websocket-client

    看看官方例子:

    import websocket
    try:
        import thread
    except ImportError:
        import _thread as thread
    import time

    def on_message(ws, message):
        print(message)

    def on_error(ws, error):
        print(error)

    def on_close(ws):
        print("### closed ###")

    def on_open(ws):
        def run(*args):
            for i in range(3):
                time.sleep(1)
                ws.send("Hello %d" % i)
            time.sleep(1)
            ws.close()
            print("thread terminating...")
        thread.start_new_thread(run, ())


    if __name__ == "__main__":
        websocket.enableTrace(True)
        ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                                  on_message = on_message,
                                  on_error = on_error,
                                  on_close = on_close)
        ws.on_open = on_open
        ws.run_forever()

    是不是非常熟悉,和上面讲到的一模一样,4种主要思想方法都是一致的,可以直接调用。

    那么到了实践环节,本次选取的是龙珠直播,为啥不是虎牙、斗鱼呢?这个待会再说,我们打开龙珠某个直播间

    在网络里面选择ws这一项,即可看到相关连接,而且这些消息是加密过的,别急,我们打开m站试试

    这个时候传输的弹幕消息已经没有加密过,直接对比,看到了一条“哈哈哈”的消息,所以我们现在可以确定就是这个websocket连接在传输相关消息。

    依葫芦画瓢,我们尝试用Python来连接

    Curl:

    curl 'wss://mbgows.plu.cn:8806/?room_id=2185&group=0' -H 'Pragma: no-cache' -H 'Origin: http://m.longzhu.com' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7' -H 'Sec-WebSocket-Key: n72+EfLt2iSrQ0EswTZ+2A==' -H 'User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36' -H 'Upgrade: websocket' -H 'Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits' -H 'Cache-Control: no-cache' -H 'Cookie: pluguest=81D781D68480BE065D952CA699B38E6627B61756AEF57338B39053154850A9502BC7FD850F86922BDF3DBD7F774BFDE5CBC80838A34B8F26' -H 'Connection: Upgrade' -H 'Sec-WebSocket-Version: 13' --compressed

    Python代码

    #!/usr/bin/env python  
    # -*- coding: utf-8 -*-
    """
    @author: zhangslob
    @file: longzhu_websocket.py 
    @time: 2018/11/17
    @desc: simple websocket client to connect longzhu
    """


    import websocket
    try:
        import thread
    except ImportError:
        import _thread as thread
    import time


    def on_message(ws, message):
        import json
        try:
            print(json.loads(message))
        except:
            print(message)


    def on_error(ws, error):
        print(error)


    def on_close(ws):
        print("### closed ###")


    def on_open(ws):
        pass
        # def run(*args):
        #     for i in range(3):
        #         time.sleep(1)
        #         ws.send("Hello %d" % i)
        #     time.sleep(1)
        #     ws.close()
        #     print("thread terminating...")
        # thread.start_new_thread(run, ())


    headers = {
        'Pragma''no-cache',
        'Origin''http://m.longzhu.com',
        'Accept-Encoding''gzip, deflate, br',
        'Accept-Language''zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
        # 'Sec-WebSocket-Key': 'n72+EfLt2iSrQ0EswTZ+2A==',
        'User-Agent''Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36',
        'Upgrade''websocket',
        'Sec-WebSocket-Extensions''permessage-deflate; client_max_window_bits',
        'Cache-Control''no-cache',
        'Connection''Upgrade',
        'Sec-WebSocket-Version''13',
    }


    if __name__ == "__main__":
        websocket.enableTrace(True)
        ws = websocket.WebSocketApp("wss://mbgows.plu.cn:8806/?room_id=2185&group=0",
                                    on_message=on_message,
                                    on_error=on_error,
                                    on_close=on_close,
                                    header=headers)
        ws.on_open = on_open
        ws.run_forever()

    你可以直接运行上面的代码,看看会有什么结果

    龙珠直播这个有点奇怪,你根本不用去向服务器发送什么消息,服务器无脑给你推送弹幕,常见的是客户端需要先告诉服务器“我是谁”,然后服务器再推送消息给你,并且还有有心跳检测,“我”告诉服务器我还在看呢,你继续给我弹幕,看看虎牙和斗鱼。

    图中绿色的是发送的消息,红色是接受的消息。像这种情况就需要自己去看js代码是如何处理消息的。斗鱼的话有公开自己的弹幕服务器第三方接入协议。

    copy代码可以阅读原文

    展开全文
  • 我们可以利用这一点让服务端将要加密的参数发送给浏览器客户端,浏览器将接收到的参数传入目标加密函数并运行,就能得到加密结果,最后返回给服务器,实现间接的调用浏览器JS函数。 关于websocket: ...
  • WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单...websocket协议我们简称为ws,ws的网络爬虫其原理和普通爬虫没有其他区别,都是模拟客户端与服务器进行对话,不同的是我们要用到websocket库。   测...
  • 模块:requests、time、websocket 分析: 1、打开chrome浏览器开始分析https://live.611.com/zq,发现网页html结构中数据都是动态加载的,我也没有点刷新,接着发现响应主体中并没有数据,那么数据应该是通过js动态...
  • WebSocket 二进制传输 AES加密和解密

    千次阅读 2018-07-25 20:03:59
    最近一直在弄WebSocket,然后必然会遇到二进制传输 1.客户端设置 // 二进制方式接收数据 ws.binaryType = 'arraybuffer'; 这样设置以后客户端接收的数据就是ArrayBuffer,注意大小写,我设置为区分大小写居然...
  • python笔记(爬虫 Scrapy websocket)

    千次阅读 2019-05-15 09:26:23
    一、我给你10个图片的url,你帮我去把10张图片下载。 方案一:多线程 ...二、websocket ...websocket本质 ...WEBSOCKET_LIST = [] ... ws = request.environ.get('wsgi.websocket') ... "Upgrade:websocket\...
  • [WebSocket]第一章:手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) [WebSocket]第二章:WebSocket集群分布式改造——实现多人在线聊天室 在本文中,我将介绍如何使用WebSocket向实时多人答题对战游戏...
  • websocket 初识

    2018-12-22 23:04:00
    之前找爬虫工作,对面问我爬过 websocket 网站没,很汗颜,那时候还只是听说过。现在想了解一下,基于 JavaScript 语言。 Websocket 是什么 websocket 是一种网络通信协议,运行在 TCP 协议之上。 对于传统的 HTTP ...
  • 爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器 puppeteer的 Python 封装。无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路。 使用 puppeteer(等其他无头浏览器)的最大优势当然是...
  • nodejs爬取websocket数据

    千次阅读 2019-07-09 16:33:16
    websocket介绍 百度百科 摘要: WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。 WebSocket使得...
  • 参考文章: 一日一技:如何正确移除Selenium中window.navigator.webdriver的值 pyppeteer使用总结 ... pyppeteer 是对无头浏览器 ...使用 puppeteer(等其他无头浏览器)的最大优势当然是对 js 加密实行降维打击,...
  • 关于blob加密视频的基于m3u8和ts文件下载转MP4视频的python爬虫实现 首先谈一下这篇文章主要的爬虫对象,基本上都是一些视频网站(一些大厂会有自己独特的编码风格需要自行破解加密格式,所以很难实现,所以这篇文章...
  • 爬虫的概念和作用

    千次阅读 2019-03-17 13:02:00
    04 WEBSOCKET 爬虫的概念 爬虫的概念 爬虫更官方点的名字叫数据采集,英文一般称作spider,就是通过编程来全自动的从互联网上采集数据。 比如说搜索引擎就是一种爬虫爬虫需要做的就是模拟正常的...
  • 爬虫逻辑:这种聊天室滚动消息,一般是通过websocket消息发送,首先查看下websocket的消息 在websocket下找到如下消息,这些数据可以推断出是base64加密的,复制到解密窗口可以发现 已经找到了我们想要的数据。...
  • WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它的出现使客户端和服务器之间的数据交换变得更加简单。WebSocket 通常被应用在实时性要求较高的场景,例如赛事数据、股票证券、网页聊天和在线绘图等。 在...
  • 在参数上,加密的参数是 code 这个参数,所以我们先试试能不能通过搜索大法定位参数加密的位置。 通过全局检索可以看到是很难一下分析出 code 这个加密的位置是在哪里的。 结果真的太多了,还有朋友想试试 code ...
  • 爬虫

    2020-06-27 16:04:00
    目录爬虫爬虫一:自学内容1 爬虫介绍2 requests模块3 代理4 爬视频5 自动登录网站爬虫二:昨日回顾今日内容1 requests+bs4爬汽车之家新闻2 bs4的使用(遍历文档树和查找文档树)3 带你搭一个免费的代理池4 验证码...
  • 其实对于这种加密最简单的办法就是跑油猴脚本(前提是没有更改关键的方法名),不过我同样也测试了下,这里只定位到了 websocket 的位置,并没有 code 的加密。 其实这里还有一个简单的思路,工具多了容易被我们...
  • 为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。 http://www.cnblogs.com/shijiaqi1066/p/3795075.html 1 WebSocket与传统Web实时通信技术 1.1 WebSocket HTTP是一种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,589
精华内容 1,035
关键字:

websocket爬虫加密

爬虫 订阅