用Python爬取爱奇艺视频弹幕

逃离我推掉我的手 2022-12-18 13:55 879阅读 0赞

爱奇艺弹幕

1.网页分析

本文以爬取《乐队的夏天第2季》第13期上视频弹幕为例,首先通过以下步骤找到存放弹幕的真实url。

format_png

分析弹幕真实url,我们发现,参数5981449914376200是视频tvid,参数62是tvid倒数4为的前两位,参数00是tvid的最后两位,.z前的参数1为视频总时长除以300秒向上取整。观察相邻两个弹幕文件包,可以看出爱奇艺每5分钟更新一次弹幕文件。

format_png 1

由于直接爬取出来的弹幕文件存在乱码,需要进行二进制编码,方可得到最终的弹幕数据。

2.爬虫实战

  1. import zlib
  2. import requests
  3. # 1.爬取xml文件
  4. def download_xml(url):
  5. bulletold = requests.get(url).content # 二进制内容
  6. return zipdecode(bulletold)
  7. def zipdecode(bulletold):
  8. '对zip压缩的二进制内容解码成文本'
  9. decode = zlib.decompress(bytearray(bulletold), 15 + 32).decode('utf-8')
  10. return decode
  11. for x in range(1,12):
  12. # x是从1到12,12怎么来的,这一集总共57分钟,爱奇艺每5分钟会加载新的弹幕,57除以5向上取整
  13. url = 'https://cmts.iqiyi.com/bullet/62/00/5981449914376200_300_' + str(x) + '.z'
  14. xml = download_xml(url)
  15. # 把编码好的文件分别写入17个xml文件中(类似于txt文件),方便后边取数据
  16. with open('./aiqiyi/iqiyi' + str(x) + '.xml', 'a+', encoding='utf-8') as f:
  17. f.write(xml)
  18. # 2.读取xml文件中的弹幕数据数据
  19. from xml.dom.minidom import parse
  20. import xml.dom.minidom
  21. def xml_parse(file_name):
  22. DOMTree = xml.dom.minidom.parse(file_name)
  23. collection = DOMTree.documentElement
  24. # 在集合中获取所有entry数据
  25. entrys = collection.getElementsByTagName("entry")
  26. print(entrys)
  27. result = []
  28. for entry in entrys:
  29. content = entry.getElementsByTagName('content')[0]
  30. print(content.childNodes[0].data)
  31. i = content.childNodes[0].data
  32. result.append(i)
  33. return result
  34. with open("aiyiqi_danmu.txt", mode="w", encoding="utf-8") as f:
  35. for x in range(1,12):
  36. l = xml_parse("./aiqiyi/iqiyi" + str(x) + ".xml")
  37. for line in l:
  38. f.write(line)
  39. f.write("\n"

3.数据预览

format_png 2

-————————

长按识别下方二维码,并关注公众号

format_png 3

1.回复“PY”领取1GB Python数据分析资料

2.回复“BG”领取5GB 名企数据分析报告

发表评论

表情:
评论列表 (有 0 条评论,879人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PythonB站视频

    via:菜J学Python 众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕。不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评