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 相关文章推荐
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
Python中常用的内置方法
Jan 28 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Django自定义用户登录认证示例代码
Jun 30 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python爬取天气数据的实例详解
Nov 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
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
详解vue中组件参数
2018/07/09 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
vue-router的hooks用法详解
2020/06/08 Javascript
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python3安装crypto出错及解决方法
2019/07/30 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
师范学院毕业生求职信范文
2013/12/26 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
仓管员岗位责任制
2014/02/19 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
人事聘任通知
2015/04/21 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
创业计划书之熟食店
2019/10/16 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python