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 相关文章推荐
python代码检查工具pylint 让你的python更规范
Sep 05 Python
python模块restful使用方法实例
Dec 10 Python
Python创建日历实例
Aug 21 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
pyinstaller还原python代码过程图解
Jan 08 Python
python设置代理和添加镜像源的方法
Feb 14 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
python全面解析接口返回数据
Feb 12 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
第四节--构造函数和析构函数
2006/11/16 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
DEFER怎么用?
2006/07/01 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
利用Python实现Windows定时关机功能
2017/03/21 Python
python os模块简单应用示例
2019/05/23 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
python用700行代码实现http客户端
2021/01/14 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
实习自荐信
2013/10/13 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL