赞
踩
当前,王家卫导演,胡歌、马伊琍、唐嫣、辛芷蕾、游本昌等豪华阵容主演的电视剧《繁花》在腾讯视频热播,引起的关注度十分惊人。
《繁花》一共 30 集,在腾讯视频平台 2023 年 12 月 27 开播,2024 年 1 月 10 日播出最后 2 集大结局。
今天,我们通过 Python 爬取腾讯视频弹幕,并对数据可视化分析。
本文用到的主要技术点:
requests爬虫库、xpath技术、pandas库、pyecharts库、jieba分词库、wordcloud词云库
通过爬虫,获取了 30 集电视剧约 140 万条弹幕,每集视频弹幕大约 5 万条。
每集弹幕单独保存到了一个 csv 文件,30 集大约 140 万条总的弹幕也保存到一个 csv 文件。(本文首发在“程序员coding”公众号)
接下来,我们分析网页查找弹幕 url、编写 Python 获取弹幕内容、保存弹幕进行数据分析。
在腾讯视频网站,打开《繁花》电视剧,播放任意一集,查看浏览器地址栏中的 url,这个 url 由电视剧的id
和每一集的id
组成。
继续播放视频,打开开发者工具,查看 Network 中的请求,其中红框中的180000
、210000
之类的就是弹幕请求。
查看分析弹幕 url,例如:
https://dm.video.qq.com/barrage/segment/e0047jq251d/t/v1/150000/180000
,
是由https://dm.video.qq.com/barrage/segment/
拼接e0047jq251d
,再拼接/t/v1/
,再拼接150000/180000
组成。
其中e0047jq251d
是 这一集电视剧id
,150000/180000
是递增 30000 的参数。
查看弹幕请求的Preview
或者Response
,可以看出返回的 json 格式的数据,也可以很容易通过代码提前出来。
分析完成,接下来写 Python 代码就简单了。(本文首发在“程序员coding”公众号)
通过分析弹幕 url 规律,构造请求地址,放入爬虫中运行就可以获得一集电视剧的弹幕。可以将弹幕字段保存到 csv 文件中,方便后续进行数据处理分析。
Python 代码如下:
#(本文首发在“程序员coding”公众号) import requests import pandas as pd # episodes_danmu_DataFrame是存放一集所有弹幕的DataFrame episodes_danmu_DataFrame = pd.DataFrame() # 填写腾讯视频的参数,video_code是腾讯视频的编号,num是获取弹幕的次数,step是步进参数 video_code = "c004725utxa" num = 10000 # 设置一个较大的请求次数,程序会自动判断,当没有弹幕了会自动退出循环 step = 30000 # 循环num次获取弹幕 for i in range(num): url = f'https://dm.video.qq.com/barrage/segment/{video_code}/t/v1/{i * 30000}/{i * 30000 + step}' response = requests.get(url=url).json() if (len(response["barrage_list"])) > 0: # temp_danmu_DataFrame是存放本次弹幕的DataFrame temp_danmu_DataFrame = pd.json_normalize(response['barrage_list'], errors='ignore') episodes_danmu_DataFrame = pd.concat([episodes_danmu_DataFrame, temp_danmu_DataFrame]) print("第", i + 1, "次请求弹幕,请求地址为:", url, "获取到:", temp_danmu_DataFrame.shape[0], "条弹幕,这一集总弹幕已获取到", episodes_danmu_DataFrame.shape[0], "条。") else: break print("总共获取到", episodes_danmu_DataFrame.shape[0], "条弹幕") # 查看 DataFrame 的行数和列数。 rows = episodes_danmu_DataFrame.shape print("请求得到的表格行数与列数:", rows) # 将 DataFrame 保存为 csv 文件 # 选择保存的列 episodes_danmu_DataFrame = episodes_danmu_DataFrame.loc[:, ['time_offset', 'create_time', 'content']] episodes_danmu_DataFrame.to_csv(f"腾讯视频弹幕-繁花-{episodes_danmu_DataFrame.shape[0]}条弹幕.csv", mode='w', encoding="utf-8", errors='ignore', index=False) print("弹幕保存完成!")
PyCharm 控制台输出如下,获取到《繁花》一集电视剧的约 5 万条弹幕:
接下来想想能不能再优化下程序,自动爬取每一集电视剧的弹幕呢?
其实要完成这个需求也不难,首先获取到每一集电视剧的 id,然后再用每一集的 id 放到上面的程序里,构造弹幕请求 url,就可以完成每一集电视剧弹幕的爬取了。
分析网页源代码,运用lxml库
,通过xpath
提取每一集电视剧的集数、电视剧 id、每一集 id、每一集电视剧的标题。
Python 代码如下:
import requests from lxml import etree url = 'https://v.qq.com/x/cover/mzc002006wiw7ll/x0047c2sgdz.html' response = requests.get(url=url) response.encoding = 'utf-8' html_etree = etree.HTML(response.text) # 看成一个筛子,树状 et = html_etree.xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div/div/div[2]/div[1]/div[2]/div[2]/div/div/div') for item in et: try: # 电视剧名称 name = item.xpath('./div/div[2]/text()')[0] # 第几集 episodes = item.xpath('./div/div[1]/span/text()')[0] # 剧集编码data-vid video_code = item.xpath('./div/div[1]/@data-vid')[0] # 剧集编码data-vid video_cid = item.xpath('./div/div[1]/@data-cid')[0] print(episodes,video_cid,video_code,name) except: pass
PyCharm 控制台输出如下,获取到《繁花》这部电视剧已经更新完的 30 集,每一集的集数、电视剧 id、每一集 id、每一集标题:
通过上面 2 个代码,可以获取到任意一集的弹幕和每一集电视剧的 id,通过代码整合,就可以获取到这部电视剧 30 集视频每一集的弹幕了。
爬虫获取的 30 集电视剧,每一集的弹幕保存为一个 csv 文档,截图如下:
每个 csv 文件包含弹幕位于视频的第几集、弹幕在视频出现的位置、创建弹幕时间戳、弹幕内容这几个字段。
(本文首发在“程序员coding”公众号)
通过这 140 万条弹幕,可以做一些有意思的分析,下面举几个例子权当抛砖引玉。
使用 pyecharts 可视化库统计每一集视频弹幕数量,第 30 集弹幕最多有 59032 条,第 4 集弹幕最少有 37255 条,平均每集有 46849 条弹幕。生成柱状图如下:
将时间戳create_time
转换为小时格式的时间,分析观众追剧时间分布。
from datetime import datetime
df["hour"] = df["create_time"].apply(lambda x: datetime.fromtimestamp(int(x)).strftime('%H'))
结果如下图所示,19 点至 23 点是全天追剧的高峰。
添加一列content_length
来记录content
的长度,分析弹幕长度生成图形,可以看出弹幕长度主要分布在 4-10 个字区间。
# 添加一列content_length来记录content的长度
df['content_length'] = df['content'].map(lambda x: len(str(x)))
length_series = df['content_length'].value_counts()
length_series.sort_index(ascending=True, inplace=True)
# 评论长度列表(升序)
length_list = length_series.index.astype(int).tolist()
# 各长度对应出现次数列表
count_list = length_series.values.astype(int).tolist()
使用 jieba 分词库、wordcloud 词云库找出弹幕中高频词汇。以第一集弹幕为例,生成的图片如下:
用 30 集弹幕生成的热词词云图如下:
完整代码包含 4 个 Python 源代码,数据集包含 30 集电视剧每一集弹幕,总计约 140万条弹幕。
以上就是“Python实战:爬取腾讯视频弹幕,获得热播剧《繁花》140万条弹幕,并可视化分析”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。