爬取websocket协议的网站

这篇文章大概一个月前就想写了,可是中间各种懒癌发作,追赶项目,打游戏,健身,踢球,撩妹。直到今天,闲下来了,才想起来要写。

9月份有个朋友给我发来这网站,问我怎么爬。我经验浅薄,第一次看到这种类型的网站。它不同于过去我爬取的那些网站,它是通过websocket协议来获取数据的。也就是说过去我的那些get啊post的方法,在这里统统没用。http://viewapi.kxt.com/大家可以进去感受一下

图片.png

遇到事情第一件事就是去google,不过这里说句题外话。我经常在群里和一些新人朋友说,你要想成为一个优秀的程序猿(装逼脸),必须得会英文。因为你遇到的坑,别人都遇到过,你只要去stackoverflow那里搜一下,很快就能找到你要的答案,你只要看懂上面的英文就好了。另外,最新的那些文档也都是英文的,汉化的速度很难跟上更新的速度。不过不会英文也能把问题解决就是了,因为我们还有人工智能!找个群,找个论坛,发条信息“在线等,急!”,这样就可以等待人工智能来帮你排忧解难。

我在google上找到了一些信息和可使用的包

图片.png

通过模仿它的代码,我跑了一下
毫无意外,失败了!!
然后我懒癌发作,找了个人工智能,直接扔给他去研究。
他自己重写了一个爬虫,再跑!
毫无意外,失败了!
然后我突然发现network里的response是没有任何数据的,这不行!

图片.png

这里是用的火狐,换谷歌看看

图片.png

YO nigger!有数据了,而且我们发现了些有意思的东西对不对!!看我的红箭头!!然后一道灵光打进了我的天灵盖!!!突然想到了些什么!!!!眼前一幕幕画面快速闪过,最终定格在!

图片.png

这里!!!!!
没错!!!!这时候感觉自己就像柯南一样!!我终于明白了!!!!
然后我就跟人工智能说!

YLT6SL8H0C0[4%]2ZLL896O.png

然后毫无意外的!!!!
成功了!!!!

图片.png

最后把代码贴出来了,重要的事情说三遍,代码作者是朝阳-皮皮警(瞎瞎),代码作者是朝阳-皮皮警(瞎瞎),代码作者是朝阳-皮皮警(瞎瞎)!

作者:朝阳-皮皮警(瞎瞎)
import websocket
# import thread
import thread
import time
import pprint

def on_message(ws, message):
    print(1)
    pprint.pprint(message)
    # print(ws.recv())

def on_error(ws, error):
    print(2)
    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)
        ws.send('{"cmd":"login","number":100,"codes":["CJRL","KUAIXUN"]}')
        print('yoyoyo')
        time.sleep(5)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())

headers={'Accept-Encoding:gzip, deflate, sdch','Accept-Language:zh-CN,zh;q=0.8',
         'Cache-Control:no-cache','Host:120.27.195.4:9502',
         'Origin:http://viewapi.kxt.com','Pragma:no-cache',
         'Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits',
         'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'
         }
if __name__ == "__main__":
    websocket.enableTrace(True)
    url='ws://118.31.236.175:9502/?token=sHdy2IF5eqh9daXYf4Goypl6z6eTh3xpgYuF2oK1dpaxd3aTgXiwmop4ndWLkKHWfp3SnJp8hWOXe6DGf5Ks2cegnc2YZ3-okYSZ05eBhtaOZZyngp2qnJekhteVlIfPu2V3zI59gpp_mq3Zf42C1oR3yqiIiJaogYuB2nzPZaA'
    ws = websocket.WebSocketApp(url,
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close,
                                header=headers)
    ws.on_open = on_open
    ws.run_forever()

推荐阅读更多精彩内容