当前位置:首页 > 实用技巧 >

芒果tv怎么查看自己发过的弹幕

来源:原点资讯(www.yd166.com)时间:2023-11-06 18:58:32作者:YD166手机阅读>>

得到url,两条url差别在于递增的数字,60为视频每60秒更新一次数据包:

https://cmts.iqiyi.com/bullet/64/00/1078946400_60_1_b2105043.br https://cmts.iqiyi.com/bullet/64/00/1078946400_60_2_b2105043.br

br文件可以用brotli库进行解压,但实际操作起来很难,特别是编码等问题,难以解决;在直接使用utf-8进行解码时,会报以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 52: invalid start byte

在解码中加入ignore,中文不会乱码,但html格式出现乱码,数据提取依然很难:

decode("utf-8", "ignore")

芒果tv怎么查看自己发过的弹幕,(17)

小刀被编码弄到头疼,如果有兴趣的小伙伴可以对上面的内容继续研究,本文就不在进行深入。所以本文采用另一个方法,对得到url进行修改成以下链接而获得.z压缩文件:

https://cmts.iqiyi.com/bullet/64/00/1078946400_300_1.z

之所以如此更改,是因为这是爱奇艺以前的弹幕接口链接,他还未删除或修改,目前还可以使用。该接口链接中1078946400是视频id;300是以前爱奇艺的弹幕每5分钟会加载出新的弹幕数据包,5分钟就是300秒,《哥斯拉大战金刚》时长112.59分钟,除以5向上取整就是23;1是页数;64为id值的第7为和第8为数。

实战代码

import requests import pandas as pd from lxml import etree from zlib import decompress # 解压 df = pd.DataFrame() for i in range(1, 23): url = f'https://cmts.iqiyi.com/bullet/64/00/1078946400_300_{i}.z' bulletold = requests.get(url).content # 得到二进制数据 decode = decompress(bulletold).decode('utf-8') # 解压解码 with open(f'{i}.html', 'a ', encoding='utf-8') as f: # 保存为静态的html文件 f.write(decode) html = open(f'./{i}.html', 'rb').read() # 读取html文件 html = etree.HTML(html) # 用xpath语法进行解析网页 ul = html.xpath('/html/body/danmu/data/entry/list/bulletinfo') for i in ul: contentid = ''.join(i.xpath('./contentid/text()')) content = ''.join(i.xpath('./content/text()')) likeCount = ''.join(i.xpath('./likecount/text()')) print(contentid, content, likeCount) text = pd.DataFrame({'contentid': [contentid], 'content': [content], 'likeCount': [likeCount]}) df = pd.concat([df, text]) df.to_csv('哥斯拉大战金刚.csv', encoding='utf-8', index=False)

结果展示:

芒果tv怎么查看自己发过的弹幕,(18)

评论分析网页

爱奇艺视频的评论在网页下方,依然是动态加载的内容,需要进入浏览器的开发者工具进行抓包,当网页下拉取时,会加载一条数据包,里面包含评论数据:

芒果tv怎么查看自己发过的弹幕,(19)

得到的真实url:

https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&channel_id=1&content_id=1078946400&hot_size=10&last_id=&page=&page_size=10&types=hot,time&callback=jsonp_1629025964363_15405 https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&channel_id=1&content_id=1078946400&hot_size=0&last_id=7963601726142521&page=&page_size=20&types=time&callback=jsonp_1629026041287_28685 https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&channel_id=1&content_id=1078946400&hot_size=0&last_id=4933019153543021&page=&page_size=20&types=time&callback=jsonp_1629026394325_81937

第一条url加载的是精彩评论的内容,第二条url开始加载的是全部评论的内容。经过删减不必要参数得到以下url:

https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=1078946400&last_id=&page_size=10 https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=1078946400&last_id=7963601726142521&page_size=20 https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=1078946400&last_id=4933019153543021&page_size=20

区别在于参数last_id和page_size。page_size在第一条url中的值为10,从第二条url开始固定为20。last_id在首条url中值为空,从第二条开始会不断发生变化,经过我的研究,last_id的值就是从前一条url中的最后一条评论内容的用户id(应该是用户id);网页数据格式为json格式。

实战代码

import requests import pandas as pd import time import random 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() try: a = 0 while True: if a == 0: url = 'https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=1078946400&page_size=10' else: # 从id_list中得到上一条页内容中的最后一个id值 url = f'https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&business_type=17&content_id=1078946400&last_id={id_list[-1]}&page_size=20' print(url) res = requests.get(url, headers=headers).json() id_list = [] # 建立一个列表保存id值 for i in res['data']['comments']: ids = i['id'] id_list.append(ids) uname = i['userInfo']['uname'] addTime = i['addTime'] content = i.get('content', '不存在') # 用get提取是为了防止键值不存在而发生报错,第一个参数为匹配的key值,第二个为缺少时输出 text = pd.DataFrame({'ids': [ids], 'uname': [uname], 'addTime': [addTime], 'content': [content]}) df = pd.concat([df, text]) a = 1 time.sleep(random.uniform(2, 3)) except Exception as e: print(e) df.to_csv('哥斯拉大战金刚_评论.csv', mode='a ', encoding='utf-8', index=False)

结果展示:

芒果tv怎么查看自己发过的弹幕,(20)

栏目热文

电脑微信聊天弹出窗口怎么切换(电脑微信不弹出窗口)

电脑微信聊天弹出窗口怎么切换(电脑微信不弹出窗口)

随着安卓微信8.0.41内测更新过后,PC版微信3.9.也发布了内测版,小编接着就来给大家介绍一下主要更新的功能.不过该...

2023-11-06 19:15:15查看全文 >>

电脑微信聊天界面怎么调整(微信直接进入聊天界面)

电脑微信聊天界面怎么调整(微信直接进入聊天界面)

一、全屏输入模式在使用微信聊天的过程中,你是否有过文字输入区域有限的困扰?别担心!微信其实有一个隐藏的功能,可以让你享受...

2023-11-06 19:32:07查看全文 >>

微信聊天界面变成绿色怎么弄(微信聊天界面怎么全变成黑色)

微信聊天界面变成绿色怎么弄(微信聊天界面怎么全变成黑色)

目前安卓微信发布了 8.0.30 测试版,这次的更新也有一些新变化,下面我们就来一起了解一下!首先,当我们进入设置—帮助...

2023-11-06 19:36:08查看全文 >>

电脑微信对话框颜色怎么调(电脑微信对话框大小设置)

电脑微信对话框颜色怎么调(电脑微信对话框大小设置)

微信现在几乎可以说已经成为我们生活里离不开的一个社交软件,和朋友联系需要用到微信,和工作伙伴对接工作需要用到微信,买东西...

2023-11-06 19:27:57查看全文 >>

怎么设置电脑上微信聊天窗口(怎么设置微信一直在电脑上)

怎么设置电脑上微信聊天窗口(怎么设置微信一直在电脑上)

在日常使用电脑微信过程中,很多时候我们都需要隐藏微信窗口,以免被他人发现我们正在聊天或进行一些不想让别人知道的操作。那么...

2023-11-06 19:30:39查看全文 >>

芒果tv弹幕和视频不同步怎么解决(芒果tv弹幕怎么转中文)

芒果tv弹幕和视频不同步怎么解决(芒果tv弹幕怎么转中文)

在过去很长一段时间里,提起影视著作权被盗版,一般人都会想到音像制品方面的盗版。而如今,新技术的出现,数字和网络技术的进步...

2023-11-06 19:37:07查看全文 >>

芒果tv自己发过的弹幕怎么删除

芒果tv自己发过的弹幕怎么删除

人类早已在20世纪中叶就逐步从“文字时代”步入“影像时代”。当前的“90后”“00后”更是与影像传播如影随形,因此作为当...

2023-11-06 18:59:13查看全文 >>

芒果tv自己发的弹幕自己看不了(芒果tv的弹幕怎么找不到)

芒果tv自己发的弹幕自己看不了(芒果tv的弹幕怎么找不到)

众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕。不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良...

2023-11-06 19:37:57查看全文 >>

芒果tv怎么撤销自己发的弹幕

芒果tv怎么撤销自己发的弹幕

【文艺观潮】作者:黄华(福建师范大学传播学院副教授)又是一年新春到。每到这个时候,“春晚”就成为人们茶余饭后绕不开的话题...

2023-11-06 19:10:16查看全文 >>

芒果tv怎么看发过的弹幕(芒果tv怎么看新闻联播)

芒果tv怎么看发过的弹幕(芒果tv怎么看新闻联播)

那边还在传《爸爸去哪儿》全线禁播,这边《爸爸去哪儿》第五季先导片已经悄然上线。看播放成绩10个小时2500万播放量,成...

2023-11-06 19:10:49查看全文 >>

文档排行