效果

输入要爬取的视频的BV号即可爬取该视频的弹幕。

过程

基本思路

基本的思路很简单,还是老步骤:

1、构造爬取的url

2、解析返回的数据

3、使用json或Xpath或正则表达式提取数据

4、保存数据

寻找url地址

第一步

刚开始还是从网页版中寻找url地址,结果请求很多,找了半天也没有找到

第二步

于是我们可以访问一下手机版的页面,而根据常识,弹幕这种东西一般是通过ajax来请求的,所以我们过滤一下,只看异步请求。

此时请求就变得少了很多,但是依然没有找到我们需要的弹幕数据,此时才发现我们并没有点击播放视频。

第三步

弹幕是在视频播放的过程中播放的,理所当然只有当我们播放视频并且打开弹幕后才会请求弹幕的数据,我们点击播放。

点击播放后我们可以发现请求变多了,再次寻找我们发现 168881748.xml 请求的地址便是弹幕数据了。

第四步

到这里我们就想到了,这种地址是怎么请求的呢?不同的视频请求的地址肯定是不一样的,应该是js生成的吧!现在我们来搜索一下该文件名``168881748`

很显然这是构造出来的地址,我们点进去看一下

不出所料是js构成的请求地址,我们可以发现这便是页面的数据,我们进一步去验证一下,刷新页面,查看一下网页的数据。

果然在该页面的文档中我们找到了

现在的思路

现在思路就很清晰了

1、通过视频url获取弹幕文件url

2、爬取弹幕文件url

3、提取数据

代码实现

# coding=utf-8

import requests

from lxml import etree

import re

class BiliSpider:

def __init__(self,BV):

# 构造要爬取的视频url地址

self.BVurl = "https://m.bilibili.com/video/"+BV

self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}

# 弹幕都是在一个url请求中,该url请求在视频url的js脚本中构造

def getXml_url(self):

# 获取该视频网页的内容

response = requests.get(self.BVurl, headers = self.headers)

html_str = response.content.decode()

# 使用正则找出该弹幕地址

# 格式为:https://comment.bilibili.com/168087953.xml

# 我们分隔出的是地址中的弹幕文件名,即 168087953

getWord_url = re.findall(" ‘//comment.bilibili.com/‘+ (.*) +‘.xml‘,", html_str)

getWord_url = getWord_url[0].replace("+","").replace(" ","")

# 组装成要请求的xml地址

xml_url = "https://comment.bilibili.com/{}.xml".format(getWord_url)

return xml_url

# Xpath不能解析指明编码格式的字符串,所以此处我们不解码,还是二进制文本

def parse_url(self,url):

response = requests.get(url,headers = self.headers)

return response.content

# 弹幕包含在xml中的中,取出即可

def get_word_list(self,str):

html = etree.HTML(str)

word_list = html.xpath("//d/text()")

return word_list

def run(self):

# 1.根据BV号获取弹幕的地址

start_url = self.getXml_url()

# 2.请求并解析数据

xml_str = self.parse_url(start_url)

word_list = self.get_word_list(xml_str)

# 3.打印

for word in word_list:

print(word)

if __name__ == ‘__main__‘:

BVName = input("请输入要爬取的视频的BV号:")

spider = BiliSpider(BVName)

spider.run()

这里只打印了弹幕,并没有保存,可以根据自己的需求进行更改!

原文:https://www.cnblogs.com/wuren-best/p/12566297.html

java弹幕爬取,手把手教你爬取B站弹幕(超详细)!相关推荐

  1. 网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)

    导读:本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫:另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程 ...

  2. 大厂年薪43w测试开发手把手教你搭建Web自动化测试框架,超详细

    测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...

  3. 手把手教你实现Gitlab远程备份(超详细,图文并茂)

    为防止服务器的磁盘损坏数据无法取出,因此我们得做好代码的备份工作,因此除了每天在Gitlab那台服务器上自动备份之外,还需要将每天的备份文件copy到另外一台文件备份服务器上,已达到双保险的要求. 1 ...

  4. 以『公众号』为例,手把手教你爬取PC端数据

    之前教过大家如何爬取手机APP数据[以某乎为实战案例,教你用Python爬取手机App数据] 思路:主要是通过手机设置代理,然后在pc端开启抓包工具获取数据包,然后在编写python代码(get方式) ...

  5. 手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示

    大家好,我是阿辰,今天手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示 上次有粉丝说,那个是ios手机,安卓手机现在需要root权限才可以安装证书,那么今天就不以手机为例,以电脑PC端为 ...

  6. 【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔!

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/art ...

  7. python 批量下载网页图片_手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ /1 前言/ 上篇文章 手把手教你爬取天堂网1920*1080大图片(批量下载)--理论篇我们谈及了天堂网 ...

  8. 手把手教你爬取清纯小姐姐私房照,小孩子写学

    手把手教你爬取清纯小姐姐私房照,小孩子写学 先上效果图 头文件: 因为爬虫需要用到请求网络部分,所以需要这两个包,没有的话自行下载即可.这个可以直接用pip安装.如果连pip都不懂,那就只能学习一下p ...

  9. 爬取医药卫生知识服务系统的药品数据——超详细流程

    爬取医药卫生知识服务系统的药品数据--超详细流程 文章目录 爬取医药卫生知识服务系统的药品数据--超详细流程 前言 一.寻找药品数据 二.爬取药品ID 1.资源获取 2.数据提取 3.资源保存 4.主 ...

  10. Shopify成功案例,手把手教你玩转独立站

    Shopify成功案例,手把手教你玩转独立站 COVID-19的大流行对全球经济产生了较大的冲击,电子商务行业也不能幸免.我们的Shopify商店如何在这场全球灾难中生存?也许你可以在这些成功的Sho ...

最新文章

  1. ATS名词术语(待续)
  2. C 语言编程 — const 关键字
  3. RGB CMYK HSV LAB
  4. 观察性研究的网络Meta分析
  5. [LeetCode] Remove Duplicates from Sorted List - 链表问题
  6. linux7怎么安装yum,centos7下怎么安装yum
  7. 04.MyBatis别名的设置和类型转换器
  8. Tensorflow保存神经网络参数有妙招:Saver和Restore
  9. System.Data.Sqlite批量添加数据
  10. Metasploit物联网安全渗透测试增加对硬件的支持
  11. mac下查看.mobileprovision文件及钥匙串中证书.cer文件
  12. 夜神模拟器 Fiddler Tunnel to......443
  13. 无源晶振有方向吗?无源贴片晶振贴反会怎样?
  14. 什么是Cutoff Scores/Marks?
  15. css 毛玻璃: backdrop-filter
  16. vb 读取mysql所有表名_VB 读取ACCESS数据库中所有表名和指定表字段名.doc
  17. 第一章 matlab 学习入门之matlab基础
  18. Python中for循环的使用
  19. [随笔所想] 学英语打卡2000天碎碎念
  20. SQL16 查找GPA最高值

热门文章

  1. 杯具啊,混合语言编程的弊端出现了,兼谈js的开发工具
  2. 小米蓝牙键盘怎么连接_不是吐槽,是推荐!买了个小米旗下的蓝牙双模键盘。。。...
  3. 英伟达显卡虚拟化vGPU实践指南
  4. python爬虫 微信公众号模拟登陆js解密
  5. 水声信号混响matlab,水声信号
  6. 少儿编程软件Scratch下载(Mac、Windows皆可)
  7. X1000之LCD部分的翻译
  8. 关于tableau的介绍
  9. 怎么尽可能将pdf文件压缩到最小
  10. 实现网站在线客服系统代码过程中解决问题-js实现点击复制文本