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去掉字符串中重复字符的方法
Feb 27 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
Django 外键的使用方法详解
Jul 19 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
Django xadmin安装及使用详解
Oct 26 Python
Python 图片处理库exifread详解
Feb 25 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
js函数般调用正则
2008/04/08 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Python中作用域的深入讲解
2018/12/10 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
端口镜像是怎么实现的
2014/03/25 面试题
应聘文员自荐信范文
2014/03/11 职场文书
公司门卫工作职责
2014/06/28 职场文书
作风整顿剖析材料
2014/09/30 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2019年大学推荐信
2019/06/24 职场文书
创业计划书之酒店
2019/08/30 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android