今天讲解如何用Python爬取芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这几个常见常用的影视、舆论平台的弹幕和评论,这类爬虫得到的结果一般用于娱乐、舆情分析,如:新出一部火爆的电影,爬取弹幕评论分析他为什么这么火;微博又出大瓜,爬取底下评论看看网友怎么说,等等这娱乐性分析 。
本文爬取一共六个平台,十个爬虫案例,如果只对个别案例感兴趣的可以根据:芒果TV、腾讯视频、B站、爱奇艺、知乎、微博这一顺序进行拉取观看 。完整的实战源码已在文中,我们废话不多说,下面开始操作!
芒果TV本文以爬取电影《悬崖之上》为例,讲解如何爬取芒果TV视频的弹幕和评论!
网页地址:
https://www.mgtv.com/b/335313/12281642.html?fpa=15800&fpos=8&lastp=ch_movie
弹幕
分析网页弹幕数据所在的文件是动态加载的,需要进入浏览器的开发者工具进行抓包,得到弹幕数据所在的真实url 。当视频播放一分钟它就会更新一个json数据包,里面包含我们需要的弹幕数据 。
文章插图
得到的真实url:
https://bullet-ali.hitv.com/bullet/2021/08/14/005323/12281642/0.jsonhttps://bullet-ali.hitv.com/bullet/2021/08/14/005323/12281642/1.json
可以发现,每条url的差别在于后面的数字,首条url为0,后面的逐步递增 。视频一共120:20分钟,向上取整,也就是121条数据包 。实战代码
import requestsimport pandas as pdheaders = {'user-agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}df = pd.DataFrame()for e in range(0, 121):print(f'正在爬取第{e}页')resposen = requests.get(f'https://bullet-ali.hitv.com/bullet/2021/08/3/004902/12281642/{e}.json', headers=headers)# 直接用json提取数据for i in resposen.json()['data']['items']:ids = i['ids']# 用户idcontent = i['content']# 弹幕内容time = i['time']# 弹幕发生时间# 有些文件中不存在点赞数try:v2_up_count = i['v2_up_count']except:v2_up_count = ''text = pd.DataFrame({'ids': [ids], '弹幕': [content], '发生时间': [time]})df = pd.concat([df, text])df.to_csv('悬崖之上.csv', encoding='utf-8', index=False)
结果展示:文章插图
评论
分析网页芒果TV视频的评论需要拉取到网页下面进行查看 。评论数据所在的文件依然是动态加载的,进入开发者工具,按下列步骤进行抓包:Network→js,最后点击查看更多评论 。
文章插图
加载出来的依然是js文件,里面包含评论数据 。得到的真实url:
https://comment.mgtv.com/v4/comment/getCommentList?page=1&subjectType=hunantv2014&subjectId=12281642&callback=jQuery1820749973529821774_1628942431449&_support=10000000&_=1628943290494https://comment.mgtv.com/v4/comment/getCommentList?page=2&subjectType=hunantv2014&subjectId=12281642&callback=jQuery1820749973529821774_1628942431449&_support=10000000&_=1628943296653
其中有差别的参数有page和_,page是页数,_是时间戳;url中的时间戳删除后不影响数据完整性,但里面的callback参数会干扰数据解析,所以进行删除 。最后得到url:https://comment.mgtv.com/v4/comment/getCommentList?page=1&subjectType=hunantv2014&subjectId=12281642&_support=10000000
数据包中每页包含15条评论数据,评论总数是2527,得到最大页为169 。文章插图
实战代码
import requestsimport pandas as pdheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}df = pd.DataFrame()for o in range(1, 170):url = f'https://comment.mgtv.com/v4/comment/getCommentList?page={o}&subjectType=hunantv2014&subjectId=12281642&_support=10000000'res = requests.get(url, headers=headers).json()for i in res['data']['list']:nickName = i['user']['nickName']# 用户昵称praiseNum = i['praiseNum']# 被点赞数date = i['date']# 发送日期content = i['content']# 评论内容text = pd.DataFrame({'nickName': [nickName], 'praiseNum': [praiseNum], 'date': [date], 'content': [content]})df = pd.concat([df, text])df.to_csv('悬崖之上.csv', encoding='utf-8', index=False)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 6款超好用的macOS软件,让你的Mac更高效
- 白帽黑客如何使用Metasploit进行SSH服务扫描技巧
- 不会吧,你还不会用RequestId看日志 ?
- Python 中的自然语言处理入门
- C#中使用opencv处理图像
- 游戏视频录制,用什么软件录屏好?
- 好用的企业邮箱怎么选择?可用邮箱大全
- 如何使用 Django 发送电子邮件
- 如何设计百万级的用户ID
- Linux内存占用常用的几个分析方法,你确定都知道?