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的Zato发送AMQP消息的教程
Apr 16 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
给Python入门者的一些编程建议
Jun 15 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python数据类型详解(四)字典:dict
May 12 Python
Pandas标记删除重复记录的方法
Apr 08 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
如何基于python实现归一化处理
Jan 20 Python
Flask response响应的具体使用
Jul 15 Python
Python 数据可视化之Seaborn详解
Nov 02 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 中的类
2006/10/09 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue中如何使用ztree
2018/02/06 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
django 发送手机验证码的示例代码
2018/04/25 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
如何保障Web服务器安全
2014/05/05 面试题
应届生体育教师自荐信
2013/10/03 职场文书
大学生毕业自我评价范文分享
2013/11/07 职场文书
就业自荐书
2013/12/05 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
旷工检讨书大全
2015/08/15 职场文书