用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕( 三 )


result[ 'v2_up_count' ] = data[ 'data' ][ 'items' ][i][ 'v2_up_count' ]
except :
result[ 'v2_up_count' ] = ''
details.append(result)
return details
#输入关键信息
def count_danmu () :
danmu_total = []
num1 = input( '第一个数字' )
num2 = input( '第二个数字' )
page = int(input( '输入总时长' ))
for i in range(page):
danmu_total.extend(get_mangguo_danmu(num1, num2, i))
return danmu_total
def main () :
df = pd.DataFrame(count_danmu())
df.to_csv( 'mangguo_danmu.csv' )
if name == 'main' :
main()
3.数据预览
用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕文章插图
点击并拖拽以移动
四、爱奇艺弹幕1.网页分析本文以爬取《乐队的夏天第2季》第13期上视频弹幕为例 , 首先通过以下步骤找到存放弹幕的真实url 。
用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕文章插图
点击并拖拽以移动
?
分析弹幕真实url , 我们发现 , 参数5981449914376200是视频tvid , 参数62是tvid倒数4为的前两位 , 参数00是tvid的最后两位 , .z前的参数1为视频总时长除以300秒向上取整 。 观察相邻两个弹幕文件包 , 可以看出爱奇艺每5分钟更新一次弹幕文件 。
用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕文章插图
点击并拖拽以移动
?
由于直接爬取出来的弹幕文件存在乱码 , 需要进行二进制编码 , 方可得到最终的弹幕数据 。
2.爬虫实战
import zlib
import requests
1.爬取xml文件def download_xml (url) :
bulletold = requests.get(url).content # 二进制内容
return zipdecode(bulletold)
def zipdecode (bulletold) :
'对zip压缩的二进制内容解码成文本'
decode = zlib.decompress(bytearray(bulletold), 15 + 32 ).decode( 'utf-8' )
return decode
for x in range( 1 , 12 ):
x是从1到12 , 12怎么来的 , 这一集总共57分钟 , 爱奇艺每5分钟会加载新的弹幕,57除以5向上取整url = 'cmts.iqiyi.com/bullet/62/0… + str(x) + '.z'
xml = download_xml(url)
把编码好的文件分别写入17个xml文件中(类似于txt文件) , 方便后边取数据with open( './aiqiyi/iqiyi' + str(x) + '.xml' , 'a+' , encoding= 'utf-8' ) as f:
f.write(xml)
2.读取xml文件中的弹幕数据数据from xml.dom.minidom import parse
import xml.dom.minidom
def xml_parse (file_name) :
DOMTree = xml.dom.minidom.parse(file_name)
collection = DOMTree.documentElement
在集合中获取所有entry数据entrys = collection.getElementsByTagName( "entry" )
print(entrys)
result = []
for entry in entrys:
content = entry.getElementsByTagName( 'content' )[ 0 ]
print(content.childNodes[ 0 ].data)
i = content.childNodes[ 0 ].data
result.append(i)
return result
with open( "aiyiqi_danmu.txt" , mode= "w" , encoding= "utf-8" ) as f:
for x in range( 1 , 12 ):
l = xml_parse( "./aiqiyi/iqiyi" + str(x) + ".xml" )
for line in l:
f.write(line)
f.write(
"\n"
3.数据预览
用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕文章插图
点击并拖拽以移动