用Python爬取六大平台的弹幕、评论,看这一篇就够了( 四 )

结果展示,获取的内容不包括二级评论,如果需要,可自行爬取,操作步骤差不多:

用Python爬取六大平台的弹幕、评论,看这一篇就够了

文章插图
 
爱奇艺本文以爬取电影《哥斯拉大战金刚》为例,讲解如何爬爱奇艺视频的弹幕和评论!
网页地址:
https://www.iqiyi.com/v_19rr0m845o.html弹幕 
分析网页爱奇艺视频的弹幕依然是要进入开发者工具进行抓包,得到一个br压缩文件,点击可以直接下载,里面的内容是二进制数据,视频每播放一分钟,就加载一条数据包:
用Python爬取六大平台的弹幕、评论,看这一篇就够了

文章插图
 
得到url,两条url差别在于递增的数字,60为视频每60秒更新一次数据包:
https://cmts.iqiyi.com/bullet/64/00/1078946400_60_1_b2105043.brhttps://cmts.iqiyi.com/bullet/64/00/1078946400_60_2_b2105043.brbr文件可以用brotli库进行解压,但实际操作起来很难,特别是编码等问题,难以解决;在直接使用utf-8进行解码时,会报以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 52: invalid start byte在解码中加入ignore,中文不会乱码,但html格式出现乱码,数据提取依然很难:
decode("utf-8", "ignore")
用Python爬取六大平台的弹幕、评论,看这一篇就够了

文章插图
 
小刀被编码弄到头疼,如果有兴趣的小伙伴可以对上面的内容继续研究,本文就不在进行深入 。所以本文采用另一个方法,对得到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 requestsimport pandas as pdfrom lxml import etreefrom 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)结果展示:
用Python爬取六大平台的弹幕、评论,看这一篇就够了

文章插图
 
评论 
分析网页爱奇艺视频的评论在网页下方,依然是动态加载的内容,需要进入浏览器的开发者工具进行抓包,当网页下拉取时,会加载一条数据包,里面包含评论数据:
用Python爬取六大平台的弹幕、评论,看这一篇就够了

文章插图
 
得到的真实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_15405https://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_28685https://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:


推荐阅读