python3写爬取B站视频弹幕功能
作者:laozhang 发布时间:2023-10-31 10:00:50
标签:python3,B站视频弹幕
需要准备的环境:
一个B站账号,需要先登录,否则不能查看历史弹幕记录
联网的电脑和顺手的浏览器,我用的Chrome
Python3环境以及request模块,安装使用命令,换源比较快:
pip3 install request -i http://pypi.douban.com/simple
爬取步骤: 登录后打开需要爬取的视频页面,打开开发者工具台,Chrome可以使用F12快捷键,选择network监听请求
点击查看历史弹幕,获取请求
其中rolldate后面的数字表示该视频对应的弹幕号,返回的数据中timestamp表示弹幕日期,new表示数目
在查看历史弹幕中任选一天,查看,会发出新的请求
dmroll ,时间戳,弹幕号,表示获取该日期的弹幕,1507564800 表示2017/10/10 0:0:0
该请求返回xml数据
使用正则表达式获取所有弹幕消息,匹配模式
'<d p=".*?">(.*?)</d>'
拼接字符串,将所有弹幕保存到本地文件即可
with open('content.txt', mode='w+', encoding='utf8') as f: f.write(content)
参考代码如下,将弹幕按照日期保存为单个文件...因为太多了...
import requests
import re
import time
"""
爬取哔哩哔哩视频弹幕信息
"""
# 2043618 是视频的弹幕标号,这个地址会返回时间列表
# https://www.bilibili.com/video/av1349282
url = 'https://comment.bilibili.com/rolldate,2043618'
# 获取弹幕的id 2043618
video_id = url.split(',')[-1]
print(video_id)
# 获取json文件
html = requests.get(url)
# print(html.json())
# 生成时间戳列表
time_list = [i['timestamp'] for i in html.json()]
# print(time_list)
# 获取弹幕网址格式 'https://comment.bilibili.com/dmroll,时间戳,弹幕号'
# 弹幕内容,由于总弹幕量太大,将每个弹幕文件分别保存
for i in time_list:
content = ''
j = 'https://comment.bilibili.com/dmroll,{0},{1}'.format(i, video_id)
print(j)
text = requests.get(j).text
# 匹配弹幕内容
res = re.findall('<d p=".*?">(.*?)</d>', text)
# 将时间戳转化为日期形式,需要把字符串转为整数
timeArray = time.localtime(int(i))
date_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(date_time)
content += date_time + '\n'
for k in res:
content += k + '\n'
content += '\n'
file_path = 'txt/{}.txt'.format(time.strftime("%Y_%m_%d", timeArray))
print(file_path)
with open(file_path, mode='w+', encoding='utf8') as f:
f.write(content)
最终效果
之后可以 做一些分词生成词云或者进行情感分析,有时间在说吧....
大家可以在下方给小编留言你学习的心得,也感谢你对脚本之家的支持。
来源:https://my.oschina.net/ahaoboy/blog/1579979
0
投稿
猜你喜欢
- 摘要: 前端框架 Bootstrap 的模态对话框,可以使用 remote 选项指定一个 URL,这样对话框在第一次弹出的时候就会自动从这个
- 自从web2.0之后,网页设计开始走向实用设计的阶段,越来越多的设计师注意到“为表达信息而设计”。着迷于前段时间黑白灰老师给大家介绍的“in
- 学习编写简练、优化的CSS需要大量的实践和一种不自觉的强迫性清洁的渴望。然而让你的CSS保持整洁并不仅仅是你对清洁的疯狂的心理需求,尤其对于
- 大家知道直接使用ASP是不能够重启服务器的,这时我们需要制作一个组件来实现功能,ASP通过这个组件调用系统API,然后按照不同的重启和关机方
- 通过界面设计上是能手工操作的,无法达到我批量修改几千台服务器。 因为此了一个脚本来批量执行。 环境:redgate + mssql 2008
- 一 描述720. 词典中最长的单词 - 力扣(LeetCode) (leetcode-cn.com)给出一个字符串数组 words
- 最近在工作中遇到一个问题,就是有一个功能希望在各种服务器上实现,而服务器上的系统版本可能都不一样,有的是 CentOS 6.x,有的是 Ce
- 一、准备工作:1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。2.在SQL SERVER下
- 利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户:select * from ( select *
- 有一个查询如下: 代码如下:SELECT c.CustomerId, CompanyName FROM Customers c
- <?phphighlight_file(__FILE__);error_reporting(0);$content = $_POST[
- by yemoo有时在编写网页代码时发现,img底部莫名奇妙多出大约3px的空白,无论怎么调节css都不可以,今天再次遇到此问题,网上看了一
- <%@ transaction = required %><%response.b
- 有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错
- 使用本文提供的JavaScript脚本,配合Dreamweaver的层和行为的运用,可以在页面中显示可拖动的精美月历。具体制作步骤如下:1、
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 12 - Drag and Drop using
- 迭代器是一种支持next()操作的对象。它包含一组元素,当执行next()操作时,返回其中一个元素;当所有元素都被返回后,生成一个StopI
- 引言上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不
- 输入汉字提示拼音,试试下面这个函数,不知是不是你要的那个:查询汉字便宜到词典网<%function getpychar(ch
- 这篇文章主要介绍了Python二次规划和线性规划使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的