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聊天程序实例代码分享
Nov 18 Python
python简单实现旋转图片的方法
May 30 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
基于hashlib模块--加密(详解)
Jun 21 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python绘制条形图方法代码详解
Dec 19 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
利用Python+OpenCV三步去除水印
May 28 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
PHP动态创建Web站点的方法
2011/08/14 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JsRender实用入门教程
2014/10/31 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python生成器generator用法实例分析
2015/06/04 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
python基于opencv 实现图像时钟
2021/01/04 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
js实现弹框效果
2021/03/24 Javascript
咨询公司各岗位职责
2013/12/02 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
优秀党员获奖感言
2014/02/18 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
vue封装数字翻牌器
2022/04/20 Vue.js