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实现巡检系统(solaris)示例
Apr 02 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
Django框架多表查询实例分析
Jul 04 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python中%格式表达式实例用法
Jun 18 Python
Django框架模板用法详解
Jun 10 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+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
php fread函数使用方法总结
2019/05/28 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 常用的安装Module方式汇总
2017/05/06 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
初中校园广播稿
2014/02/02 职场文书
挂职自我鉴定
2014/02/26 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
具结保证书
2015/01/17 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
python如何查找列表中元素的位置
2022/05/30 Python