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发送Email方法实例
Aug 21 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
python简单商城购物车实例代码
Mar 15 Python
python读取文件名称生成list的方法
Apr 27 Python
opencv python 傅里叶变换的使用
Jul 21 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
python实现canny边缘检测
Sep 14 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
Python序列化与反序列化相关知识总结
Jun 08 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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中如何调用webservice的实例参考
2013/04/25 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
js 操作符汇总
2014/11/08 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
基本DOM节点操作
2017/01/17 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
python中模块的__all__属性详解
2017/10/26 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
学习python可以干什么
2019/02/26 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python项目跨域问题解决方案
2020/06/22 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
《大作家的小老师》教学反思
2014/04/16 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
PL350与SW11的比较
2021/04/22 无线电
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
SQL Server表分区删除详情
2021/10/16 SQL Server