python3写爬取B站视频弹幕功能


Posted in Python onDecember 22, 2017

需要准备的环境:

一个B站账号,需要先登录,否则不能查看历史弹幕记录

联网的电脑和顺手的浏览器,我用的Chrome

Python3环境以及request模块,安装使用命令,换源比较快:

pip3 install request -i http://pypi.douban.com/simple

爬取步骤: 登录后打开需要爬取的视频页面,打开开发者工具台,Chrome可以使用F12快捷键,选择network监听请求

python3写爬取B站视频弹幕功能 

点击查看历史弹幕,获取请求

python3写爬取B站视频弹幕功能

python3写爬取B站视频弹幕功能

其中rolldate后面的数字表示该视频对应的弹幕号,返回的数据中timestamp表示弹幕日期,new表示数目

python3写爬取B站视频弹幕功能

在查看历史弹幕中任选一天,查看,会发出新的请求

dmroll ,时间戳,弹幕号,表示获取该日期的弹幕,1507564800 表示2017/10/10 0:0:0

python3写爬取B站视频弹幕功能

python3写爬取B站视频弹幕功能

该请求返回xml数据

python3写爬取B站视频弹幕功能

使用正则表达式获取所有弹幕消息,匹配模式

'<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)

最终效果

python3写爬取B站视频弹幕功能

python3写爬取B站视频弹幕功能

之后可以 做一些分词生成词云或者进行情感分析,有时间在说吧....

大家可以在下方给小编留言你学习的心得,也感谢你对三水点靠木的支持。

Python 相关文章推荐
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
python pygame模块编写飞机大战
Nov 20 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
scrapy头部修改的方法详解
Dec 06 Python
python神经网络学习 使用Keras进行回归运算
May 04 Python
机器学习经典算法-logistic回归代码详解
Dec 22 #Python
利用python将xml文件解析成html文件的实现方法
Dec 22 #Python
python实现数据预处理之填充缺失值的示例
Dec 22 #Python
NetworkX之Prim算法(实例讲解)
Dec 22 #Python
Python实现控制台中的进度条功能代码
Dec 22 #Python
Python中的探索性数据分析(功能式)
Dec 22 #Python
Python反射用法实例简析
Dec 22 #Python
You might like
php常用表单验证类用法实例
2015/06/18 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
python 杀死自身进程的实现方法
2019/07/01 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
python实现五子棋程序
2020/04/24 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
工程招投标邀请书
2014/01/26 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
居安思危观后感
2015/06/11 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
一文读懂navicat for mysql基础知识
2021/05/31 MySQL