先来思考一个问题,B站一个视频的弹幕最多会有多少?

比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的。

也就是说,有一个视频地址为

https://www.bilibili.com/vide... ,

你如果直接去requests.get这个地址,里面是不会有弹幕的,回想第一篇说到的携程异步加载数据的方式,B站的弹幕也一定是先加载当前视频的界面,然后再异步填充弹幕的。

接下来我们就可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件被拦截下来的包在火狐可以抓到,同理谷歌也是)的控制台来观察网络请求了。

经过仔细排查之后,我找到了一个请求xml的,它后面跟了一个oid,查看它的响应内容之后可以发现它就是弹幕文件。

它的响应时间98毫秒,远超其它几个响应,所以说如果把弹幕直接放在视频页面,用户体验一定会很差。

找到弹幕了,爬取它很容易,但是我们想要是爬取固定av号视频的弹幕,而不是说随意去找一个oid来爬取弹幕,这样我们都不知道爬下来的弹幕是哪个视频的。

接下来我们就可以复制oid的117784982值,去视频页面搜索看看了,通过视频来获得它的oid再来爬xml弹幕就很方便了。

这次用了谷歌浏览器,在里面通过搜索oid果然搜索到相关的数据了。

其中cid是弹幕对应的id,aid对应视频av号。

先把这个页面爬取下来。

1 # encoding: utf-823 import requests45 headers = {6 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',7 'Accept': 'text/html',8 'Cookie': "_uuid=1DBA4F96-2E63-8488-DC25-B8623EFF40E773841infoc; buvid3=FE0D3174-E871-4A3E-877C-10 A4ED86E20523155831infoc; LIVE_BUVID=AUTO8515670521735348; sid=l765gx48; DedeUserID=33717177; 11 DedeUserID__ckMd5=be4de02fd64f0e56; SESSDATA=cf65a5e0%2C1569644183%2Cc4de7381; 12 bili_jct=1e8cdbb5755b4ecd0346761a121650f5; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(umY))|ukl~0J'ulY~uJm)kJ; UM_distinctid=16ce0e51cf0abc-02da63c2df0b4b-5373e62-1fa400-16ce0e51cf18d8; stardustpgcv=0606; im_notify_type_33717177=0; finger=b3372c5f; CURRENT_QUALITY=112; bp_t_offset_33717177=300203628285382610"910 }11 resp = requests.get(' https://www.bilibili.com/vide... ',headers=headers)12 print(resp.text)

拿到了内容我们就要从中解析弹幕id了,对于这种规则紊乱的网页,我们就不能用上一篇中Bs4解析了,而是使用正则表达式。

正则表达式最简单的使用方式其实就是直接match。

1 re.search(匹配规则,文本).group()

观察这里的内容,我们大致的匹配规则就有了。

1 re.search(匹配规则,文本).group()观察这里的内容,我们大致的匹配规则就有了。cid={目标}&aid=av号117784982就是我们的目标。1 av_id = '67946325'2 resp = requests.get(' https://www.bilibili.com/vide...'+av_id,headers=headers)3 match_rule = r'cid=(.*?)&aid'4 oid = re.search(match_rule,resp.text).group().replace('cid=','').replace('&aid','')5 print('oid='+oid)

先根据av号拿到视频页面,然后解析视频页面拿到oid,最后用oid去请求xml弹幕文件。

1 xml_url = ' https://api.bilibili.com/x/v1... '+oid2 resp = requests.get(xml_url,headers=headers)3 print(resp)

这样我们就完成B站弹幕爬虫了。

需要相关python资料的可以通过扫一扫备注【爬虫】

今天分享个用Python爬虫爬取Bilibili弹幕的小例子解析相关推荐

  1. python爬取bilibili弹幕_Python爬虫爬取Bilibili弹幕过程解析

    先来思考一个问题,B站一个视频的弹幕最多会有多少? 比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的. 也就是说,有一个视频地址为https://www.bilibi ...

  2. python爬虫爬取微信公众号小程序信息

    python爬虫爬取微信公众号小程序信息 爬取内容 某汽车维修信息提供的维修店名称,地点以及电话(手机)号码 爬取步骤 啥也别管,先抓包看看,在这里,博主使用的抓包软件是charles 抓包:将网络传 ...

  3. 使用python爬虫爬取bilibili视频

    可以使用 Python 爬虫框架如 Scrapy 来爬取 Bilibili 的视频.首先需要了解 Bilibili 网站的构造,包括数据是如何呈现的,然后构建请求来获取所需的数据.同时需要考虑反爬虫措 ...

  4. python爬虫 爬取bilibili新番榜

    这里用到的模块是request模块和beautifulsoup 首先我们需要打开Bilibili新番榜的审查元素 通过观察可以发现每一个动漫的信息都分别存在了li标签下的rank-item类中 而所有 ...

  5. Python爬虫:爬取Bilibili弹幕过程示例代码

    这篇文章主要介绍了Python爬虫爬取Bilibili弹幕过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先来思考一个问题,B站一个视频的弹 ...

  6. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  7. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

  8. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

  9. Python爬虫---爬取腾讯动漫全站漫画

    Python爬虫---爬取腾讯动漫全站漫画 操作环境 网页分析 明确目标 提取漫画地址 提取漫画章节地址 提取漫画图片 编写代码 导入需要的模块 获取漫画地址 提取漫画的内容页 提取章节名 获取漫画源 ...

最新文章

  1. Programming Computer Vision with Python (学习笔记一)
  2. springboot项目自定义类在配置文件中的提示
  3. java注释模板_Java注释模板设置
  4. 如何将不带web.xml的Spring应用程序部署到Tomcat
  5. 电脑用电量_为什么换了智能电表后,我家用电量一下子多了这么多呢?
  6. 车用总线技术 | J1939协议实用指南与J1939数据记录方案
  7. html前端素材(网页模板素材)
  8. PDF文件怎么转成JPG图片?来看这几种转换方法
  9. 空间数据库管理方案及数据文件组织方式
  10. 阿里云数据库怎么使用
  11. v.douyin.com/xxx抖音网址官方生成制作抖音缩短口令网址php接口方法
  12. 《黄帝内经.生气通天论篇》不生病的智慧节选02
  13. 如果一只股票退市,那么里面所持有这只股票人的钱该怎么办?
  14. 商务通隐形手机,现形!
  15. 解决 unkown the request
  16. 印度尼西亚 east java_东爪哇(EAST JAVA)
  17. Memcached/Redis可视化客户端TreeNMS使用
  18. 易语言学习笔记——基础篇
  19. jeecg扩展自定义菜单图标
  20. js解析json报错

热门文章

  1. R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩、离散色彩、梯度色彩)实战(density plot)
  2. pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列、基于dataframe的日期数据列生成日期索引
  3. R语言ggplot2可视化:置信区间与分组具有相同色彩、自定义置信区间带的色彩、Make confidence intervals the same color as line by group
  4. python计算多个模型在不同数据集上的预测概率、获取每个数据集上的最优模型、多个最优模型的ROC曲线进行对比分析
  5. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解
  6. R语言在ggplot中使用变量指定柱状图的名称实战
  7. R计算混淆矩阵(Confusion Matrix)
  8. Maxout激活函数
  9. 标称变量(Categorical Features)或者分类变量(Categorical Features​​​​​​​)编码为数值变量(Continuous Features​​​​​​​)
  10. python生成随机数—random模块