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之微信文章爬虫实例讲解
Jul 12 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Python使用asyncio包处理并发详解
Sep 09 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
python交易记录整合交易类详解
Jul 03 Python
Flask配置Cors跨域的实现
Jul 12 Python
django实现类似触发器的功能
Nov 15 Python
解决Python二维数组赋值问题
Nov 28 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
Python如何在单元测试中给对象打补丁
Aug 03 Python
python urllib库的使用详解
Apr 13 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Numpy之文件存取的示例代码
2018/08/03 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
Java基础知识面试题
2014/03/25 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
会计专业求职信范文
2014/03/16 职场文书
python 中的@运算符使用
2021/05/26 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python