首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!

python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!

作者头像
Python研究者
发布于 2021-03-05 06:26:38
发布于 2021-03-05 06:26:38
63300
代码可运行
举报
文章被收录于专栏:Python研究者Python研究者
运行总次数:0
代码可运行

1

前言

在上一篇文章【以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕】,教会了大家如何爬取爱奇艺弹幕

本文将在上文的基础上继续完善,爬取更多的弹幕数据进行可视化分析!

同样还是以『赘婿』为例,目前已经更新到28集,下面将爬取这28集的全部弹幕数据,约7w+条数据!!!

2

采集数据

1.寻找url

上文介绍到,每一集都需要通过查看数据把获取弹幕的url

因此,我们需要去获取这28级的弹幕url!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tv_name_list =[
'',
'/54/00/7973227714515400',
'/57/00/4779805474835700',
'/37/00/1016845483273700',
'/77/00/8679935826337700',
'/46/00/7197533339804600',
'/48/00/8042213977424800',
'/98/00/2262609044749800',
'/94/00/1699488619659400',
'/47/00/1805374511564700',
'/46/00/1933721047194600',
'/08/00/7232026471250800',
'/59/00/8982352350925900',
'/43/00/4702797553454300',
'/38/00/2151107991923800',
'/93/00/8357465155589300',
'/29/00/2071693573022900',
'/71/00/4646645944127100',
'/39/00/1182091647913900',
'/31/00/7711721648193100',
'/58/00/2099769377685800',
'/83/00/3042314248738300',
'/21/00/2889100571832100',
'/98/00/3374410909698000',
'/37/00/4335405595243700',
'/32/00/5215381530163200',
'/11/00/2379725258541100',
'/48/00/4872856713204800',
'/08/00/1488519001760800',
]

以上就是28集的弹幕url参数!!!

2.请求数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_data():
    for k in range(1,len(tv_name_list)):#291-28
        url_id = tv_name_list[k]
        for x in range(1,11):
            # x是从11111怎么来的,这一集总共46分钟,爱奇艺每5分钟会加载新的弹幕,46除以5向上取整
            try:
                url = 'https://cmts.iqiyi.com/bullet'+str(url_id)+'_300_' + str(x) + '.z'
                xml = download_xml(url)
                # 把编码好的文件分别写入个xml文件中(类似于txt文件),方便后边取数据
                with open('./lyc/zx'+str(k) +'-'+ str(x) + '.xml', 'a+', encoding='utf-8') as f:
                    f.write(xml)
            except:
                pass

这样就可以将含有的弹幕信息的xml文件下载到本地!

3.合并数据到excel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import openpyxl
outwb = openpyxl.Workbook()  # 打开一个将写的文件
outws = outwb.create_sheet(index=0)  # 在将写的文件创建sheet

"""
import xlwt
# # 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding = 'utf-8')
# # 创建一个worksheet
worksheet = workbook.add_sheet('sheet1')
#
# # 写入excel
# # 参数对应 行,, 值
# worksheet.write(0,0, label='index')
# worksheet.write(0,1, label='tvname')
# worksheet.write(0,2, label='uid')
# worksheet.write(0,3, label='content')
# worksheet.write(0,4, label='likeCount')
"""
outws.cell(row = 1 , column = 1 , value = "index")
outws.cell(row = 1 , column = 2 , value = "tvname")
outws.cell(row = 1 , column = 3 , value = "uid")
outws.cell(row = 1 , column = 4 ,  value = "content")
outws.cell(row = 1 , column = 5 , value = "likeCount")

避坑:

之前我们使用xlwt来保存数据到excel,但是最多写到65535行,这次我们采用openpyxl来写入到excel!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def xml_parse(file_name,tv__name):
    global  count
    DOMTree = xml.dom.minidom.parse(file_name)
    collection = DOMTree.documentElement
    # 在集合中获取所有entry数据
    entrys = collection.getElementsByTagName("entry")

    for entry in entrys:
        uid = entry.getElementsByTagName('uid')[0]
        content = entry.getElementsByTagName('content')[0]
        likeCount = entry.getElementsByTagName('likeCount')[0]
        #print(uid.childNodes[0].data)
        #print(content.childNodes[0].data)
        #print(likeCount.childNodes[0].data)
        # 写入excel
        # 参数对应 行,, 值
        outws.cell(row=count, column=1, value=str(count))
        outws.cell(row=count, column=2, value=str("第"+str(tv__name)+"集"))
        outws.cell(row=count, column=3, value=str(uid.childNodes[0].data))
        outws.cell(row=count, column=4, value=str(content.childNodes[0].data))
        outws.cell(row=count, column=5, value=str(likeCount.childNodes[0].data))
        count=count+1

这样就可以将xml里的数据保存到excel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def combine_data():
    for k in range(1,29):
        for x in range(1,11):
            try:
                xml_parse("./lyc/zx"+str(k) +"-"+ str(x) + ".xml",k)
                print(str(k) + "-" + str(x))
            except:
                pass
    # 保存
    #workbook.save('弹幕数据集-李运辰.xls')
    outwb.save("弹幕数据集-李运辰.xls")  # 保存结果

这样7w+条弹幕数据可以完全写入到excel中,命名为 弹幕数据集-李运辰.xls

3

数据可视化

1.浏览数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导包
import pandas as pd

#读入数据
df_all = pd.read_csv("弹幕数据集-李运辰.csv",encoding="gbk")
df = df_all.copy()

# 重置索引
df = df.reset_index(drop=True)
print(df.head())

说明:1.index序号、2.tvname集数、3.uid用户id、4.content评论、5.likeCount评论点赞数

2.累计发送弹幕数的用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#累计发送弹幕数的用户
def an1():
    danmu_counts = df.groupby('uid')['content'].count().sort_values(ascending=False).reset_index()
    danmu_counts.columns = ['用户id', '累计发送弹幕数']
    name = danmu_counts['用户id']
    name = (name[0:10]).tolist()
    dict_values = danmu_counts['累计发送弹幕数']
    dict_values = (dict_values[0:10]).tolist()

    # 链式调用
    c = (
        Bar(
            init_opts=opts.InitOpts(  # 初始配置项
                theme=ThemeType.MACARONS,
                animation_opts=opts.AnimationOpts(
                    animation_delay=1000, animation_easing="cubicOut"  # 初始动画延迟和缓动效果
                ))
        )
            .add_xaxis(xaxis_data=name)  # x轴
            .add_yaxis(series_name="累计发送弹幕数的用户", yaxis_data=dict_values)  # y轴
            .set_global_opts(
            title_opts=opts.TitleOpts(title='', subtitle='',  # 标题配置和调整位置
                                      title_textstyle_opts=opts.TextStyleOpts(
                                          font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                      ), pos_left="90%", pos_top="10",
                                      ),
            xaxis_opts=opts.AxisOpts(name='用户id', axislabel_opts=opts.LabelOpts(rotate=45)),
            # 设置x名称和Label rotate解决标签名字过长使用
            yaxis_opts=opts.AxisOpts(name='累计发送弹幕数'),

        )
            .render("累计发送弹幕数的用户.html")
    )

3.查看某个用户评论情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查看某个用户评论情况
def an2():
    df_top1 = df[df['uid'] == 2127950839].sort_values(by="likeCount", ascending=False).reset_index()
    print(df_top1.head(20))

4.用户(2127950839)每一集的评论数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查看用户(2127950839)每一集的评论数
def an3():
    df_top1 = df[df['uid'] == 2127950839].sort_values(by="likeCount", ascending=False).reset_index()
    data_top1 = df_top1.groupby('tvname')['content'].count()
    print(data_top1)
    name = data_top1.index.tolist()
    dict_values = data_top1.values.tolist()
    # 链式调用
    c = (
        Bar(
            init_opts=opts.InitOpts(  # 初始配置项
                theme=ThemeType.MACARONS,
                animation_opts=opts.AnimationOpts(
                    animation_delay=1000, animation_easing="cubicOut"  # 初始动画延迟和缓动效果
                ))
        )
            .add_xaxis(xaxis_data=name)  # x轴
            .add_yaxis(series_name="查看用户(2127950839)每一集的评论数", yaxis_data=dict_values)  # y轴
            .set_global_opts(
            title_opts=opts.TitleOpts(title='', subtitle='',  # 标题配置和调整位置
                                      title_textstyle_opts=opts.TextStyleOpts(
                                          font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                      ), pos_left="90%", pos_top="10",
                                      ),
            xaxis_opts=opts.AxisOpts(name='集数', axislabel_opts=opts.LabelOpts(rotate=45)),
            # 设置x名称和Label rotate解决标签名字过长使用
            yaxis_opts=opts.AxisOpts(name='评论数'),

        )
            .render("查看用户(2127950839)每一集的评论数.html")
    )

5.剧集评论点赞数最多的评论内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#剧集评论点赞数最多的评论内容
def an4():
    df_like = df[df.groupby(['tvname'])['likeCount'].rank(method="first", ascending=False) == 1].reset_index()[['tvname', 'content', 'likeCount']]
    df_like.columns = ['集', '弹幕内容', '点赞数']
    print(df_like)

6.评论内容词云

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#评论内容词云
def an5():
    contents = (df_all['content']).tolist()

    text = "".join(contents)
    with open("stopword.txt", "r", encoding='UTF-8') as f:
        stopword = f.readlines()
    for i in stopword:
        print(i)
        i = str(i).replace("\r\n", "").replace("\r", "").replace("\n", "")
        text = text.replace(i, "")
    word_list = jieba.cut(text)
    result = " ".join(word_list)  # 分词用 隔开
    # 制作中文云词
    icon_name = 'fas fa-play'
    gen_stylecloud(text=result, icon_name=icon_name, font_path='simsun.ttc',
                   output_name="评论内容词云.png")  # 必须加中文字体,否则格式错误

4

总结

1.爬取了7w+『赘婿』弹幕,保存到excel(数据分享给大家)!

2.通过pandas读取excel并进行相关统计计算!

3.以可视化方式当分析好的数据进行可视化展示!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫数据分析挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
最近爱奇艺独播热剧『赘婿』特别火,号主我也在一直追,借助手中的技术,想爬取弹幕分析该剧的具体情况以及网友的评论!
Python研究者
2021/03/05
1.5K0
以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
干货|Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?
本文不涉及剧透!请放心食用 最近又火了一部国产剧:《隐秘的角落》 如果你没看过,那可能会对朋友圈里大家说的“一起去爬山”、“小白船”、“还有机会吗”感到莫名其妙。 暑期推荐旅游 小五在这个端午假期也赶紧刷完了本剧,必须要写篇文章了。 由于《隐秘的角落》是在爱奇艺独播,所以数据从爱奇艺下手最直接。 如果没爬过爱奇艺,可以考虑使用豆瓣、微博、知乎(电视剧数据分析 · 万能三件套)的数据。 1、爬虫 剧很精彩,但追剧界有句俗话说得好:“弹幕往往比剧更精彩”,为了让精彩延续下去,我终究没能忍住对弹幕
腾讯NEXT学位
2020/06/30
4800
Python爬取《赘婿》弹幕
在近期的工作代码中我遇到了一些小问题,导致了我的更新慢了不少。今天我就想把我在之前遇到的问题分享给大家,并通过一篇实战内容来教会大家,希望各位小伙伴以后遇到类似问题的时候,可以想起我的文章,并解决问题。
程序员迪迪
2021/12/23
6250
爬取24w+弹幕信息后,我果断去追剧了
数据获取是数据分析中的重要的一步,数据获取的途径多种多样,在这个信息爆炸的时代,数据获取的代价也是越来越小。尽管如此,仍有很多小伙伴们不清楚如何获取有用信息。本文以最近热播排行榜第一名的《流金岁月》为例子,手把手教你如何获取爱奇艺电视剧弹幕数据。
数据STUDIO
2021/06/24
1.2K0
Python爬取394452条《都挺好》弹幕数据,比剧情还精彩?
火到什么程度?微博热搜霸榜,办公室评弹声四起,大强轻松攻占表情包,甚至连 N 年不追剧的“瘦宅”们也开始沉迷其中,大呼真香。
IT阅读排行榜
2019/04/25
7350
Python爬取394452条《都挺好》弹幕数据,比剧情还精彩?
豆瓣9.2分!17万条弹幕告诉你《沉默的真相》凭什么口碑高开暴走!
今天教大家用Python分析《沉默的真相》的17万条弹幕。公众号后台,回复关键字“沉默”获取完整数据。
CDA数据分析师
2020/10/09
5660
豆瓣9.2分!17万条弹幕告诉你《沉默的真相》凭什么口碑高开暴走!
Python操作Excel
常用的方式 常用的读写Excel的库: pandas openpyxl xlrd/xlwt/xlutils 使用它们都能够达到读写Excel的目的,但它们的侧重点又略有不同。 具体如下: pandas:数据处理最常用的分析库之一,可以读取各种各样格式的数据文件,一般输出dataframe格式,功能强大 openpyxl:主要针对xlsx格式的excel进行读取和编辑 xlrd库:从excel中读取数据,支持xls、xlsx xlwt库:对excel进行修改操作,不支持对xlsx格式的修改 xlutils库:
码客说
2022/01/17
1.5K0
用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?
综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer》,就是一个不错的综艺选择。
龙哥
2020/12/07
3410
用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?
让弹幕飞一会儿——腾讯视频弹幕(39W+)爬取实战
短短四句,揭示了两种本质——碗是大和圆的,面是长亦宽的。一秒就看清事物本质的人和一辈子才看透事物本质的人自然过着不同的人生。
DT数据侠
2019/04/25
2.7K0
让弹幕飞一会儿——腾讯视频弹幕(39W+)爬取实战
Python爬虫实战:爬取B站Top100视频,分析弹幕、播放量和分类并数据可视化
最近挺好奇的,B站每天Top100,具体什么视频最多,播放量和视频的弹幕数有没有比例关系。
Mintimate
2022/02/15
6K2
Python爬虫实战:爬取B站Top100视频,分析弹幕、播放量和分类并数据可视化
Python分析《青你2》67万条弹幕,看看有没有你Pick的小姐姐
【导语】:今天我们来聊一聊选秀节目《青春有你2》。Python技术部分请看第三部分。公众号后台,回复关键字“青你”获取完整数据。
CDA数据分析师
2020/05/21
9480
Python分析《青你2》67万条弹幕,看看有没有你Pick的小姐姐
【4】python读写文件操作---详细讲解!
python读写文件详细讲解! 1.操作xls格式的表格文件: 读取:xlrd 写入:xlwt 修改(追加写入):xlutils 2.操作xlsx格式的表格文件: 读取/写入:openpyxl 一. 读取Excel 1. 导入读取库 import xlrd 2. 打开Excel文件读取数据 data = xlrd.open_workbook('xxx.xls') 3. 获取一个工作表 table = data.sheets()[0] #通过索引顺序获取 table = data
汀丶人工智能
2022/12/21
1.3K0
【4】python读写文件操作---详细讲解!
Python办公自动化之Excel做表自动化:全网最全,看这一篇就够了!
官方文档:https://xlrd.readthedocs.io/en/latest/
Python小二
2020/09/08
8K0
Python办公自动化之Excel做表自动化:全网最全,看这一篇就够了!
Python开发 之 Python3读写Excel文件(较全)[通俗易懂]
于是我找到了xlsxwriter这个模块,它生成的文件后缀名为.xlsx,最大能够支持1048576行数据,16384列数据
全栈程序员站长
2022/11/11
2.3K0
Python开发 之 Python3读写Excel文件(较全)[通俗易懂]
不吹不黑!Python办公自动化,全网最全整理!
官方文档:https://xlrd.readthedocs.io/en/latest/
释然IT杂谈
2023/08/18
1.6K0
不吹不黑!Python办公自动化,全网最全整理!
31万弹幕大军都推荐你去看的《山海情》,是怎样一部最搞笑最土味的扶贫剧!?
也就是在1月24日该剧迎来了大结局,我们爬取腾讯视频全23集共31.79万条弹幕,看看大家都在聊什么!
可以叫我才哥
2021/08/05
3860
Python操作Excel模块,你猜哪家强?
导读:Python操作excel的模块简直不要太多,今天就为大家比较下各模块之间的优缺点。
IT阅读排行榜
2020/02/20
1.9K0
Python操作Excel模块,你猜哪家强?
python批量制作雷达图
老板要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下:
机器学习和大数据挖掘
2019/07/02
1.8K0
python批量制作雷达图
【愚公系列】2023年07月 Python自动化办公之xlswriter写入excel
官方文档:https://xlsxwriter.readthedocs.io/
愚公搬代码
2025/05/28
1130
【愚公系列】2023年07月 Python自动化办公之xlswriter写入excel
如何用Beautiful Soup爬取一个网址
Beautiful Soup是一个Python库,它将HTML或XML文档解析为树结构,以便于从中查找和提取数据。它通常用于从网站上抓取数据。
双愚
2018/08/29
6K0
如何用Beautiful Soup爬取一个网址
推荐阅读
相关推荐
以『赘婿』为实战案例,手把手教会你用python爬取『爱奇艺』视频弹幕
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档