Python爬取英雄联盟MSI直播间弹幕并生成词云图


Posted in Python onJune 01, 2021

一、环境准备

安装相关第三方库

pip install jieba
pip install wordcloud

二、数据准备

爬取对象:2021年5月23号,RNG夺冠直播间的弹幕信息

爬取对象路径:

方式1、根据开发者工具(F12),获取请求url、请求头、cookie等信息;
方式2:根据直播地址url,前+字符i

我们这里演示的是,采用方式2。

三、代码如下

import requests, re
import jieba, wordcloud

"""
# 以下是练习代码
def get_f12_barrage(url, headers, file_path):
    
    #通过f12中的,请求地址,获取弹幕数据
    #:param url:  通过弹幕地址(通过开发者工具,从请求数据中获取的)
    #:param headers:   请求头信息
    #:param file_path:  响应数据存储路径
    #:return:    无返回数据
    
    # 1、发送请求,接受响应数据
    response = requests.get(url=url, headers=headers)
    # 2、获取响应数据
    # 返回的响应可能是乱码的,需要先转成响应的编码格式
    # apparent_encoding的作用:会从网页的内容中分析网页编码的方式
    response.encoding = response.apparent_encoding
    # 3、解析响应数据
    content = response.text
    content_list = re.findall(":(.*?)@", content)
    # 4、存储响应数据, ”w+格式“,即文件存在则,先清空再写,不存在则新建文件
    with open(file_path, mode="w+", encoding="utf-8") as fp:
        for line in content_list:
            # 分析每一行,发现第一个字符元素不是想要的,先去除第一个字符
            fp.write(line[1:] + "\n")
    return file_path

"""
# ******************8********************执行代码如下******************************************
# 算法:先爬取数据,再根据爬取的数据,生成词云图
def get_barrage(url, headers, file_path):
    """
    通过请求网页前面+i的弹幕地址,获取弹幕数据
    :param url:  通过弹幕地址(网址前面+i)
    :param headers:   请求头信息
    :param file_path:  响应数据存储路径
    :return:    无返回数据
    """
    # 1、发送请求,接受响应数据
    response = requests.get(url=url, headers=headers)
    # 2、获取响应数据
    # 返回的响应可能是乱码的,需要先转成响应的编码格式
    # apparent_encoding的作用:会从网页的内容中分析网页编码的方式
    response.encoding = response.apparent_encoding
    # 3、解析响应数据
    # 此时response.text可能是乱码的
    content = response.text
    # 正则匹配响应数据,取数目标是(.*?)中的数据
    content_list = re.findall("<d p=\".*?\">(.*?)</d>", content)
    # 4、存储响应数据, ”w+格式“,即文件存在则,先清空再写,不存在则新建文件
    with open(file_path, mode="w+", encoding="utf-8") as fp:
        for line in content_list:
            fp.write(line + "\n")
    return file_path

# https://api.bilibili.com/x/v1/dm/list.so?oid=343174354
# https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=343174354&date=2021-05-23


def make_word_cloud(word_file_path):
    # 1、打开文件,默认是gbk格式打开,这里指定utf-8打开
    with open(word_file_path, encoding="utf-8") as fp:
        content = fp.read()   # read方法返回的是一个字符串

    # 2、利用结巴,分割词,得到的是一个列表
    content_list = jieba.lcut(content)
    # 再用空格,拼接字符串
    content_str = " ".join(content_list)

    # 3、设置词云图
    wc_config = wordcloud.WordCloud(
        width=700,   # 宽度
        height=500,  # 高度
        background_color='black',  # 背景色
        font_path='msyh.ttc',   # 找字体的配置路径C:\Windows\Fonts\微软雅黑,然后双击(出现3个),选择【常规-属性】
        scale=15,   # 颜色像素
        stopwords={'了', '的'},  # 词云图中过滤掉一些字眼
        contour_width=5,  # 轮廓宽度
        contour_color='red'  # 轮廓颜色
    )

    # 4、根据输入文字内容,形成一个词云图,并存储在指定路径
    wc_config.generate(content_str)
    wc_config.to_file("e:\\reg_cloud.png")
    return word_file_path







if __name__ == "__main__":
    """
    # 从开发者工具或者抓包工具中获取url地址
    f12_url = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=343174354&date=2021-05-23'
    # 从开发者工具或者抓包工具中,获取请求头信息,主要包括cookie、user-agent
    header = {
        'cookie': 'bsource=search_baidu; _uuid=BBD44BE2-5DAA-A13A-A593-FD3A83C3929423721infoc; buvid3=18335C4D-A3A0-48D5-973A-7943D63AC73E34756infoc; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(um|u)klum~0J\'uYkkJJkJJu; fingerprint=be684c13c90e4279aaaa3e2694da4285; buvid_fp=18335C4D-A3A0-48D5-973A-7943D63AC73E34756infoc; buvid_fp_plain=96D5E0EF-41D9-4A32-BE47-DFF96C44DB9F155821infoc; SESSDATA=f90082f7%2C1637884658%2C008f9%2A51; bili_jct=2f17a04a5651fb1c6579b73aeb640f7f; DedeUserID=1153205015; DedeUserID__ckMd5=b6f334f0a2d86238; sid=6vb9j9nl; bfe_id=6f285c892d9d3c1f8f020adad8bed553',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
    }
    # 申明存储文件的路径
    f12_file_path = "e:\\RNG.txt"
    """


    # 请求路径,是网页前面+i
    url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=343174354'
    file_path = "e:\\RNG_1.txt"
    # 请求头中需要包含cookie 和 user-agent,这些信息都可以用f12获取到,注意有些字符需要转义
    # 为了个人信息安全,这里的cookIe加密显示
    header = {
        'cookie': '********',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
    }
    # 调用方法
    get_barrage(url=url, headers=header, file_path=file_path)
    word_file_path = get_barrage(url=url, headers=header, file_path=file_path)
    make_word_cloud(word_file_path)

四、词云图效果展示

Python爬取英雄联盟MSI直播间弹幕并生成词云图

到此这篇关于Python爬取英雄联盟MSI直播间弹幕并生成词云图的文章就介绍到这了,更多相关Python爬取弹幕并生成词云图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python查询IP地址归属完整代码
Jun 21 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python如何输出警告信息
Jul 30 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
如何判断pytorch是否支持GPU加速
Jun 01 #Python
pytorch 两个GPU同时训练的解决方案
Jun 01 #Python
使用Django实现商城验证码模块的方法
Jun 01 #Python
pytorch通过训练结果的复现设置随机种子
Jun 01 #Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 #Python
详细介绍python类及类的用法
教你怎么用PyCharm为同一服务器配置多个python解释器
You might like
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
js 小贴士一星期合集
2010/04/07 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python中optparse模块使用浅析
2015/01/01 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
几个Shell Script面试题
2012/08/31 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
残疾人创业典型事迹
2014/02/01 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
公司催款律师函
2015/05/27 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL