python爬取直播礼物信息_python爬行虎牙弹幕礼品资料,爬取,礼物,数据

查看官方文档

官方文档链接:https://dev.huya.com/docs#/%E5%BC%80%E6%94%BEAPI%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E

会看到官方已经提供对应的接口。咱们只需要根据文档通过python实现就行了。

找到弹幕传输的方式

这里咱们可以发现,是通过两种方式传输过来的。websocket和https这两种都能获取到弹幕的信息。下面介绍一下websocket的链接方式。

生成websocket对应的参数

其实官方文档已经告诉你了,怎么建立链接了。下面我一步一步根据官方文档走,可能是因为讲的太详细了,本人踩了一些坑。

第一步:

这里就说明了,需要用到jwt的验证。这里要注意的是Header,是默认的,根据你使用的jwt的方式默认的。不需要放在signature中。

第二步:

调通字段:header表明的是jwt的认证方式,HS256的加密算法。

payload这里面缺少了房间id,实际应该是

{

"iat":1556188391,

"exp":1556188991,

"appId":"xxxxxxxxxxxx",

"roomId":roomId

}

然后再用jwt根据文档做进一步处理。生成对应的Signature。python有第三方jwt库可以直接用

附上对应的方法

import jwt

def get_sign(room_id,app_id,secret):

payload = {

"iat":int(time.time()),

"exp":int(time.time())+600,

"roomId":room_id,

"appId":app_id

}

token = jwt.encode(payload,secret,algorithm='HS256')

return token

其中iat是当前时间戳,exp是当前时间戳加上600秒。app_id以及secret是你成为虎牙开发者的时候,会有这两个信息给到你的。

调通websocket

建立链接

根据上一步,把所有对应的参数都获取到了。然后通过python的webscoket链接的方式,先建立链接。

获取数据和保持心跳

这一步发送的是你想要获取到的数据,里面包含了很多数据。具体的数据详情见虎牙开发者官方文档。

再下一步是保持心跳。保持心跳的方式很简单,就是建立连接后,保持固定的时间,发送ping字符串即可。

附上完整代码

import jwt

import websocket

try:

import thread

except ImportError:

import _thread as thread

import json

import time

def get_sign(room_id,app_id,secret):

payload = {

"iat":int(time.time()),

"exp":int(time.time())+600,

"roomId":room_id,

"appId":app_id

}

token = jwt.encode(payload,secret,algorithm='HS256')

return token

def on_message(ws, message):

info = json.loads(message)

print(info)

def on_error(ws, error):

print(error)

def on_close(ws):

print("### closed ###")

def on_open(ws):

def run(*args):

ws.send('{"command":"subscribeNotice","data":["getMessageNotice","getVipEnterBannerNotice","getSendItemNotice","getOnTVAwardNotice", "getOpenNobleNotice", "getOpenGuardianNotice", "getUserMutedNotice"],"reqId":"123456789"}')

while True:

ws.send("ping")

time.sleep(10)

thread.start_new_thread(run, ())

if __name__ == "__main__":

room_id = 521000

app_id = 'xxxxxxxxxxxxxxxx'

secret = 'xxxxxxxxxxxxxxxxxxx'

sign = get_sign(room_id,app_id,secret)

print(sign.decode())

websocket.enableTrace(True)

ws = websocket.WebSocketApp(

"ws://ws-apiext.huya.com/index.html?do=comm&roomId="+str(room_id)+"&appId="+app_id+"&iat="+str(int(time.time()))+"&sToken="+sign.decode(),

on_message=on_message,

on_error=on_error,

on_close=on_close)

ws.on_open = on_open

ws.run_forever()

后续会更新直播间详情的信息爬取。

注:

此博客纯手工,如有和其他博主的博客雷同或涉及到侵权,请麻烦联系一下我。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
环境要求 建议使用conda虚拟环境部署,python版本要求大于或等于``3.6`` 环境安装 首先你需要将本项目克隆到你本地。 然后您只需要使用下面命令即可一键安装所需的环境 ```bash pip3 install -r requirements.txt ``` 如果pip下载速度较慢,请使用下面这个命令 ``` pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ ``` 配置 在使用前,你需要完成一些基本配置 所有配置你只需要在``config.py``文件中完成,如果你不懂任何技术,请不要修改除``config.py``文件外的任何文件。 你主要是需要去配置``LIVE_URL``选项,去指定直播间的地址,配置实例 ```py LIVE_URL = r"https://live.kuaishou.com/u/KPL704668133" ``` 上面这个代码我指定了KPL直播间地址。 其次,你需要配置``BROWSER_PATH``选项,该选项需要你指定浏览器可执行文件的路径,在默认的配置中,我使用了``edge``浏览器作为驱动。 你可以配置任何使用``chromium``内核构建的浏览器,例如``Microsoft Edge``或者是``Google Chrome``等。 ```py BROWSER_PATH = r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe' ``` 其他选项对于本项目的运行影响不大,你可以看选项上面的注释进行配置 运行 如果你完成了上述的配置,使用以下命令进行启动本项目 ```bash python main.py ``` 未知礼物 由于时效性问题,可能导致一些礼物无法识别,此时,你需要额外配置一些未知的礼物。 程序会将获取到的未知的例如默认存放到``unknow_gift``目录(你可以在``config.py``中修改这个路径),名称为:礼物图片md5.png,你需要将``礼物图片md5``改为礼物真实的名称,例如,原始文件名``580c253e0bd3cc4212f7087d110691ed.png``,你需要改为``粉丝团.png`` 最后你需要执行以下命令完成礼物的导入 ```shell python import_git.py ``` 事件开发 如果你在获取到礼物、收到聊天信息、收到点赞后想实现一些业务流程处理,你需要在``handle.py``中实现。 该文件中共实现了三个方法,分别为``message``、``like``、``gift``分别代表了``消息``、``点赞``、``礼物`` 代码如下 ```py """ 收到弹幕消息会调用这个函数 """ def message(username,text): pass """ 收到点赞消息会调用这个函数 """ def like(username): pass """ 收到礼物消息会调用这个函数,如果未知礼物,gift_name 为 None """ def gift(username,gift_name): pass ``` ``message``函数会传入两个参数,分别为``username``和``text``,顾名思义``username``就是谁发的消息,``text``就是发的什么消息。 ``like``函数会传入一个参数,为``username``,就是谁点了赞。 ``gift``函数会传入两个参数,为`username`和``gift_name``,``username``是送礼物的人,``gift_name``就是礼物名称,如果遇到了未知礼物,则传入的为None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值