python爬取腾讯视频弹幕_用Python爬取腾讯视频弹幕

原标题:用Python爬取腾讯视频弹幕

via:菜J学Python

1.网页分析

本文以爬取《脱口秀大会 第3季》最后一期视频弹幕为例,首先通过以下步骤找到存放弹幕的真实url。

通过删减各参数,发现仅有timestamp参数的变化会影响弹幕数据的爬取,且timestamp参数是首项为15,公差为30的等差数列。可以大胆猜测腾讯视频每30秒更新一页弹幕数据,该视频长度为12399秒。而数据格式为标准的json格式,因此json.loads直接解析数据即可。

2.爬虫实战

importrequests

importjson

importtime

importpandas aspd

df = pd.DataFrame

forpage inrange( 15, 12399, 30):

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

url = 'https://mfm.video.qq.com/danmu?otype=json&timestamp={}&target_id=5938032297%26vid%3Dx0034hxucmw&count=80'.format(page)

print( "正在提取第"+ str(page) + "页")

html = requests.get(url,headers = headers)

bs = json.loads(html.text,strict = False) #strict参数解决部分内容json格式解析报错

time.sleep( 1)

#遍历获取目标字段

fori inbs[ 'comments']:

content = i[ 'content'] #弹幕

upcount = i[ 'upcount'] #点赞数

user_degree =i[ 'uservip_degree'] #会员等级

timepoint = i[ 'timepoint'] #发布时间

comment_id = i[ 'commentid'] #弹幕id

cache = pd.DataFrame({ '弹幕':[content], '会员等级':[user_degree],

'发布时间':[timepoint], '弹幕点赞':[upcount], '弹幕id':[comment_id]})

df = pd.concat([df,cache])

df.to_csv( 'tengxun_danmu.csv',encoding = 'utf-8')

print(df.shape)

3.数据预览

责任编辑:

好的,以下是使用 Python 抓取腾讯视频弹幕的步骤: 1. 打开腾讯视频网站,找到需要抓取弹幕视频。 2. 进入视频播放页面,按 F12 打开开发者工具,选择「网络」选项卡。 3. 在开发者工具中输入弹幕发送区的内容,点击发送按钮,观察网络请求的情况。通常情况下,会有一个 POST 请求发送弹幕数据,返回弹幕数据的 URL。 4. 使用 Python 发送与浏览器相同的 POST 请求,获取弹幕数据。 5. 解析弹幕数据,获取需要的信息。 以下是具体的代码实现: ```python import requests import json # 腾讯视频弹幕接口 url = 'https://mfm.video.qq.com/danmu?otype=json&target_id=xxx&timestamp=xxx&count=xxx&second_count=xxx&session_key=xxx' # 替换为需要抓取弹幕视频 target_id 和 session_key target_id = 'xxxxxxx' session_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 获取弹幕数据 def get_danmu_data(): # 替换为当前时间戳 timestamp = 'xxxxxxx' # 替换为需要抓取的弹幕数量 count = 'xxxxxxx' # 替换为需要抓取的二级弹幕数量 second_count = 'xxxxxxx' headers = { 'referer': 'https://v.qq.com/', 'cookie': 'pgv_pvi=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; pgv_si=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;' } headers['cookie'] += 'pgv_pvid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;' url_with_params = url.replace('xxx', timestamp).replace('xxx', count).replace('xxx', second_count).replace('xxx', session_key).replace('xxx', target_id) response = requests.post(url_with_params, headers=headers) data = json.loads(response.content.decode('utf-8')) return data # 解析弹幕数据 def parse_danmu_data(data): for item in data['comments']: print(item['content']) # 测试 if __name__ == '__main__': data = get_danmu_data() parse_danmu_data(data) ``` 注意:该代码仅供学习参考,请勿用于非法用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值