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 解析html之BeautifulSoup
Jul 07 Python
python多线程编程中的join函数使用心得
Sep 02 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
python对于requests的封装方法详解
Jan 03 Python
在cmd中查看python的安装路径方法
Jul 03 Python
python元组和字典的内建函数实例详解
Oct 22 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
python如何调用字典的key
May 25 Python
python访问hdfs的操作
Jun 06 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 Python
python实现简单的三子棋游戏
Apr 28 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 静态化实现代码
2009/03/20 PHP
浅析php学习的路线图
2013/07/10 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
jquery ajax请求实例深入解析
2012/11/26 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
理解javascript正则表达式
2016/03/08 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue--vuex详解
2019/04/15 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python人人网登录应用实例
2014/09/26 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python实现名片管理系统
2018/11/29 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
Python 切分数组实例解析
2019/11/07 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
python 动态绘制爱心的示例
2020/09/27 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
毕业生个人求职信范例分享
2013/12/17 职场文书
绿色环保演讲稿
2014/05/10 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS