网页视频抓取工具 知乎(如何爬取电影《哥斯拉大战金刚》的弹幕和评论 )

优采云 发布时间: 2021-12-30 05:17

  网页视频抓取工具 知乎(如何爬取电影《哥斯拉大战金刚》的弹幕和评论

)

  开发工具

  Python版本:3.6.4

  相关模块:

  请求模块;

  重新模块;

  熊猫模块;

  lxml 模块;

  随机模块;

  以及一些 Python 自带的模块。

  环境设置

  安装Python并将其添加到环境变量中,pip安装所需的相关模块。

  思维分析

  本文以爬虫电影《哥斯拉大战金刚》为例,讲解如何爬取爱奇艺视频的弹幕和评论!

  目标网址

   https://www.iqiyi.com/v_19rr0m845o.html 复制代码

  Python超全数据库安装包学习路线项目源码免费分享

  抢弹幕

  爱奇艺视频弹幕还是需要进入开发者工具抓包,并得到一个br压缩文件,点击直接下载,里面的内容是二进制数据,视频播放每分钟加载一个数据包

  

  获取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") 复制代码

  

  将获取到的URL修改为如下链接即可获取.z压缩文件

  /bullet/64/00/1078946400_300_1.z 复制代码

  这个改动的原因是,这是爱奇艺之前的弹幕界面链接,没有删改,目前还可以使用。界面链接中的1078946400为视频id;300是之前爱奇艺的弹幕每5分钟就会加载一个新的弹幕数据包,5分钟是300秒,《哥斯拉大战金刚》时长112.59分钟,除以5,四舍五入为23;1是页数;64 是第 7 个和第 8 个的 id 值。

  代码

   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) 复制代码

  显示结果

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线