ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

EDG夺冠,爬爬弹幕看观众都说了啥 - Python

2021-11-09 22:33:43  阅读:123  来源: 互联网

标签:EDG cid Python res url print re 弹幕


连央视都祝贺EDG夺冠,作为码农的我们,怎么能闲着,就来爬爬B站的弹幕,看看人都说了什么。刚开始有这个想法的时候呢,B站的视频cid地址还保存在json中,今天来写的时候,发现已经没有了,截图如下:

 本来请求视频播放页面后,会有一个playlist的包,包里的json数据呢,就是图中圈圈的位置,id本来是cid。没有就没有了吧,重新找,发现源码里有。果断开干。

获取cid:

 1 import requests
 2 import re
 3 # 请求头
 4 headers = {
 5     'user-agent':'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Mobile Safari/537.36',
 6 }
 7 # 视频播放的url
 8 url = 'https://www.bilibili.com/video/BV1EP4y1j7kV'
 9 # 开始请求
10 response = requests.get(url=url, headers=headeres)
11 # 查找cid
12 results = re.findall('"pages":\[(.*?)],"subtitle"', response.text) # 列表
13 # 取出列表的第一项数据就成str了
14 strdata = results[0]
15 # 在strdata中查找cid
16 cids = re.findall('"cid":(\d+),"page"', strdata)
17 videoPart = re.findall('"part":"(.*?)","du', strdata)
18 print(cids, videoPart) # ['437586584', '437626309', '437659159', '437727348', '437729555', '437550300', '437717574'] ['第一局 4K', '第二局 4K', '第三局 4K', '第四局 4K', '第五局 4K', '开幕式', '夺冠时刻']

请求到了cid后,接下来就是通过这个cid去拼接B站的弹幕url,B站的弹幕地址存储在https://www.ibilibili.com/video/BV1EP4y1j7kV,也就是视频播放页面,在bilibili加个i就出来了。

 箭头出就是弹幕地址,弹幕地址后的oid就是刚刚找出来的cid。下面进行拼接并保存弹幕数据:

 1 alldata = zip(cids, videoPart)
 2 
 3 # 至此就找到了cid,接下来开始请求cid
 4 for cid, videoName in zip(cids, videoPart):
 5     danmuUrl = f'https://api.bilibili.com/x/v1/dm/list.so?oid={cid}' # 弹幕url
 6     print(danmuUrl)
 7     fileName = videoName # 按每场进行分别存储存储
 8     print(fileName)
 9     # 请求数据
10     res = requests.get(url=danmuUrl, headers=headers)
11     res.raise_for_status()
12     res.encoding = res.apparent_encoding # 转码
13     res.encoding = 'utf-8' # 转成utf-8
14     # print(res.text)
15     # 查找我们需要的数据
16     danmuData = re.findall('<d.*?>(.*?)</d>', res.text) # 要取弹幕内容,也就是()包含的,前面的.*?就是一个样式而已
17     # print(danmuData)
18     with open(f'{fileName}弹幕数据.txt', mode='a', encoding='utf-8-sig') as f:
19         for data in danmuData: # 循环读取每条弹幕
20             f.write(data) # 将每条弹幕顺序写入txt文档
21             f.write('\n') # 写完写一个换行符
22     break 

爬完后的部分截图:

将第二段代码的最后的break删除,爬取7个视频的弹幕。截图如下:

 

接下来做词云展示。

 

标签:EDG,cid,Python,res,url,print,re,弹幕
来源: https://www.cnblogs.com/mafu/p/15531252.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有