700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python爬虫实战 requests模块 Python实现抓取芒果TV弹幕

Python爬虫实战 requests模块 Python实现抓取芒果TV弹幕

时间:2021-11-05 00:11:07

相关推荐

Python爬虫实战 requests模块 Python实现抓取芒果TV弹幕

前言

利用Python实现抓取芒果TV弹幕,废话不多说。

让我们愉快地开始吧~

开发工具

Python版本:3.6.4

相关模块:

requests模块;

pandas模块

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

思路分析

本文以爬取电影《悬崖之上》为例,讲解如何爬取芒果TV视频的弹幕和评论!

目标网址

/b/335313/12281642.html?fpa=15800&fpos=8&lastp=ch_movie

抓取弹幕

分析网址

弹幕数据所在的文件是动态加载的,需要进入浏览器的开发者工具进行抓包,得到弹幕数据所在的真实url。当视频播放一分钟它就会更新一个json数据包,里面包含我们需要的弹幕数据。

获取真实的URL

https://bullet-/bullet//08/14/005323/12281642/0.json\https://bullet-/bullet//08/14/005323/12281642/1.json

可以发现,每条url的差别在于后面的数字,首条url为0,后面的逐步递增。视频一共120:20分钟,向上取整,也就是121条数据包。

代码实现

import requests\import pandas as pd\\headers = {\'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-/bullet//08/3/004902/12281642/{e}.json', headers=headers)\# 直接用json提取数据\for i in resposen.json()['data']['items']:\ids = i['ids'] # 用户id\content = 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:

/v4/comment/getCommentList?page=1&subjectType=hunantv&subjectId=12281642&callback=jQuery1820749973529821774_1628942431449&_support=10000000&_=1628943290494\/v4/comment/getCommentList?page=2&subjectType=hunantv&subjectId=12281642&callback=jQuery1820749973529821774_1628942431449&_support=10000000&_=1628943296653

其中有差别的参数有page_,page是页数,_是时间戳;url中的时间戳删除后不影响数据完整性,但里面的callback参数会干扰数据解析,所以进行删除。最后得到url:

/v4/comment/getCommentList?page=1&subjectType=hunantv&subjectId=12281642&_support=10000000

数据包中每页包含15条评论数据,评论总数是2527,得到最大页为169。

代码实现

import requests\import pandas as pd\\headers = {\'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'/v4/comment/getCommentList?page={o}&subjectType=hunantv&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)

效果展示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。