Python爬虫 bilibili视频弹幕提取过程详解


Posted in Python onJuly 31, 2019

两个重要点

1.获取弹幕的url是以 .xml 结尾

2.弹幕url的所需参数在视频url响应的 javascript 中

先看代码

import requests
from lxml import etree
import re
# 使用手机UA
headers = {
  "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
}
# 视频url
video_url = "https://m.bilibili.com/video/av37834086.html"
html = requests.get(url=video_url, headers=headers).content.decode('utf-8')
# 获取弹幕url的参数
cid = re.findall(r"comment: '//comment.bilibili.com/' \+ (.*?) \+ '.xml',", html)
url = "https://comment.bilibili.com/" + cid[0] + ".xml"
print(url)
response = requests.get(url, headers=headers)
html = response.content
xml = etree.HTML(html)
# 提取数据
str_list = xml.xpath("//d/text()")
# 写入文件
with open('bibi_xuxubaobao.txt', 'w', encoding='utf-8') as f:
  for line in str_list:
    f.write(line)
    f.write('\n')

先找到弹幕的url,以.xml结尾,所以先找到这串数字所在的位置,并获取这串数字发起第二次请求

Python爬虫 bilibili视频弹幕提取过程详解

而这串数字就在 第一次请求的响应的JavaScript中,可以通过 re 正则表达式进行提取

Python爬虫 bilibili视频弹幕提取过程详解

接下来的工作就是获取弹幕url返回的所有弹幕数据,然后对响应进行数据处理。

代码示例中使用的是 lxml 进行获取。接着就是保存到个人本地文件中了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
Python实现读取json文件到excel表
Nov 18 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
django允许外部访问的实例讲解
May 14 Python
python实现俄罗斯方块游戏
Mar 25 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
Django实现跨域的2种方法
Jul 31 #Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 #Python
在VS2017中用C#调用python脚本的实现
Jul 31 #Python
使用pip安装python库的多种方式
Jul 31 #Python
python实现几种归一化方法(Normalization Method)
Jul 31 #Python
python Django编写接口并用Jmeter测试的方法
Jul 31 #Python
python实现windows倒计时锁屏功能
Jul 30 #Python
You might like
php join函数应用
2011/05/04 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php实现rc4加密算法代码
2012/04/25 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python实现的密码强度检测器示例
2017/08/23 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python 如何测试文件是否存在
2020/07/31 Python
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
大学生创业计划书
2014/08/14 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
医生个人年度总结
2015/02/28 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
初一语文教学反思
2016/03/03 职场文书