Python最最新版弹幕爬虫

通过在JavaScript里面找到弹幕的原始消息,然后开启一个websocket链接向服务端发送数据,服务端即可获取到原始的弹幕消息。

一、找到弹幕消息的位置

我们都知道,某音的弹幕走的是websockets协议。既然是websockets协议,那么就必定有类似的代码段:

new WebSocket("ws://localhost:8080");

所以我们在开发者工具里面直接搜索new WebSocket。即可找到websockets开启的函数位置。

在这边打一个断点,网页就会停在这里。其中,r就是WebSocket 连接的地址。

二、根据WebSocket 的特性进行下一步的调试

当WebSocket建立之后,一般会走onMessage,所以我们就在当前js文件里面搜索onMessage。

值得注意的是:搜索onMessage之后有39的结果。但是我们只需要前5个即可。后面的都是没有价值的信息。给前5个都打上断点,刷新网页就会停在上图所示的位置。 

 具体的分析过程就忽略了,慢慢跟栈就能找到下图所示的位置:

控制台打印n的值,他的数据已经是明文的了。

三、自己重新写一个WebSocket

找到原始的数据之后,我们就可以插入以下代码:

for (let index = 0; index < r.msgs.length; index++) {
    const payload = r.msgs[index];
    const data = {}; 

    switch (payload.method) {
        case "WebcastChatMessage":
            data.content = payload.payload.content;
            data.user = payload.payload.user.desensitized_nickname;
            data.user_id = payload.payload.user.display_id;
            data.sec_uid = payload.payload.user.sec_uid;
            data.user_follow = payload.payload.user.follow_info.following_count;
            data.user_follower = payload.payload.user.follow_info.follower_count;
            console.log(data);
            break;
        case "WebcastGiftMessage":
            data.gift = payload.payload.common.describe;
            data.user = payload.payload.user.desensitized_nickname;
            data.user_id = payload.payload.user.display_id;
            data.sec_uid = "https://www.douyin.com/user/" + payload.payload.user.sec_uid;
            data.user_info = payload.payload.user.follow_info;
            data.follow_count = data.user_info.following_count;
            data.fans = data.user_info.follower_count;
            console.log(data);
            break;
        default:
    }
    if (window.flag) {
        window.ws1.send(JSON.stringify(data));
    } else {
        var ws = new WebSocket("ws://127.0.0.1:3000");
        window.ws1 = ws;
        window.flag = true;
        ws.open = function (evt) {
        };
        ws.onmessage = function (evt) {
            ws.send(JSON.stringify(data));
        }
    }
}

服务端代码(python)

async def handle_message(websocket, message):
    room_data = json.loads(message)
    if room_data:
        if room_data.get("content"):
            print(
                f"用户详情:  id:{room_data['user_id']},用户名称:{room_data['user']},粉丝数量:{room_data['user_follower']},关注数量:{room_data['user_follow']},发布内容:{room_data['content']}")
            print(f"用户主页:https://www.douyin.com/user/{room_data['sec_uid']}")
        if room_data.get("gift"):
            print(
                f"用户详情:  id:{room_data['user_id']},用户名称:{room_data['user']},粉丝数量:{room_data['user_info']['follower_count']},关注数量:{room_data['user_info']['following_count']},发布内容:{room_data['gift']}")
            print(f"{room_data['sec_uid']}")

四、总结

这种方式相比于其他的办法更简单粗暴一点,但是弊端太多,比如需要开启浏览器才行。要做成可执行文件exe就显得比较麻烦一些。后面我会写一篇专门讲使用python直接连接WebSocket链接的方法 直接获取弹幕信息。

与君相识,如沐春风细雨 

如果你喜欢这篇文章 请多多点赞 

🌏:For2018self 如果有不了解的地方欢迎咨询~

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于Python爬取B站弹幕并进行可视化的参考。 首先,您需要使用Python的第三方库 requests 和 BeautifulSoup 来爬取B站视频的弹幕。可以使用requests发送HTTP请求,然后使用BeautifulSoup解析HTML页面。 以下是一个简单的爬取B站弹幕的代码示例: ```python import requests from bs4 import BeautifulSoup # 视频的BV号 bv = 'BV1pz4y1X7Gh' # 请求B站视频页面 url = f'https://www.bilibili.com/video/{bv}' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 获取弹幕XML文件的URL durl = soup.select_one('div[data-player]')['data-player'] xml_url = durl.replace('https://', '').split('/')[1] xml_url = f'https://{xml_url}/xml/{bv}.xml' # 请求弹幕XML文件 response = requests.get(xml_url) soup = BeautifulSoup(response.text, 'html.parser') # 解析弹幕 danmus = soup.select('d') for danmu in danmus: print(danmu.text) ``` 接下来,您可以使用Matplotlib和WordCloud等库来将爬取到的弹幕进行可视化。例如,您可以使用WordCloud生成弹幕词云图: ```python from wordcloud import WordCloud import jieba import matplotlib.pyplot as plt # 将所有弹幕拼接成一个字符串 text = '' for danmu in danmus: text += danmu.text # 使用jieba进行中文分词 words = jieba.cut(text) # 生成词云图 wordcloud = WordCloud(font_path='simhei.ttf', width=800, height=400).generate(' '.join(words)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 以上就是一个简单的Python爬取B站弹幕并进行可视化的示例。当然,如果您需要更复杂的可视化效果,可以使用更多的Python库和图表绘制工具进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值