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脚本来控制Windows Azure的简单教程
Apr 16 Python
对Python中gensim库word2vec的使用详解
May 08 Python
Python之批量创建文件的实例讲解
May 10 Python
Python求解任意闭区间的所有素数
Jun 10 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
django-csrf使用和禁用方式
Mar 13 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
Python sorted对list和dict排序
Jun 09 Python
python语言的优势是什么
Jun 17 Python
Python包和模块的分发详细介绍
Jun 19 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 csv操作类代码
2009/12/14 PHP
PHP技术开发技巧分享
2010/03/23 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
用python实现的线程池实例代码
2018/01/06 Python
python调用百度语音REST API
2018/08/30 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
客服专员岗位职责范本
2013/11/29 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL