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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Django数据库表反向生成实例解析
Feb 06 Python
python爬取网页转换为PDF文件
Jun 07 Python
pandas 将索引值相加的方法
Nov 15 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Keras loss函数剖析
Jul 06 Python
Python 爬虫性能相关总结
Aug 03 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 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打开远程文件的方法和风险及解决方法
2013/11/12 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
jQuery Selector选择器小结
2010/05/06 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
低版本中Python除法运算小技巧
2015/04/05 Python
Python实现购物车功能的方法分析
2017/11/10 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python实现泊松图像融合
2018/07/26 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
工程服务质量承诺书
2015/04/29 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
如何基于python实现单目三维重建详解
2022/06/25 Python