从零开始的爬取Bilibili弹幕的Python爬虫教程

或许可以作为一个爬虫小白的练手的demo?

还是先看看什么是爬虫吧!(还有Bilibili! )

网络爬虫:
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。-----百度百科

B站:
哔哩哔哩(Nasdaq:BILI ;英文名称:bilibili,简称B站)现为中国年轻世代高度聚集的文化社区和视频平台 ,该网站于2009年6月26日创建,被粉丝们亲切的称为“B站”。2018年3月28日,哔哩哔哩在美国纳斯达克上市 。
B站早期是一个ACG(动画、漫画、游戏)内容创作与分享的视频网站 。经过十年多的发展,围绕用户、创作者和内容,构建了一个源源不断产生优质内容的生态系统 ,B站已经涵盖7000多个兴趣圈层的多元文化社区 。
2019年4月22日,针对“后台源码泄露”一事,B站做出回应:经内部紧急核查,确认该部分代码属于较老的历史版本;5月29日,哔哩哔哩发布通知称,因弹幕系统技术升级,5月29日起至6月6日网站暂时关闭弹幕功能。
截至2019年第三季度,B站月均活跃用户达1.28亿,移动端月活用户达1.14亿 ;18至35岁用户占比达78%。
2020年1月9日,胡润研究院发布《2019胡润中国500强民营企业》,哔哩哔哩位列第180位。

爬虫的背景

随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎所返回的结果包含大量用户不关心的网页。
(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
1 聚焦爬虫工作原理以及关键技术概述
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1) 对抓取目标的描述或定义;
(2) 对网页或数据的分析与过滤;
(3) 对URL的搜索策略。
----(百度百科)

该说正事了!

①第一步:这样这样
②第二部:那样那样
③第三步:run起来了
④第四步:完工

皮一下很开心kkkkkk

来看真正的过程。
或许网络上的各种爬虫会用到许多不同的第三方库,但离不开的还是requests库和re库->正则表达式。
此外这里还要用到json库。

import json
import re  #正则表达式
import requests #用来获取源码得到请求响应的 response

开始就要模拟浏览器的请求,伪装成在使用浏览器浏览网页的亚子。

# 下载页面
def downloadPage(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}   #配置请求头,User-Agent:浏览器代理(把自己伪装成浏览器请求)res = requests.get(url=url, headers=headers)return res  #返回响应

可是弹幕都在哪呢?

目前网上很多爬虫是静态页面的爬虫,类似爬取小说的内容这类,不过现在一大部分是动态的爬虫,比如我们要做的B站弹幕的爬取,而B站的网页打开后又会产生超级多眼花缭乱的request和response。
不过问题不大,包含着弹幕的response就是这个带着像是FPS游戏里准星一样的response!

把它打开康康?

虽然这里有很多乱七八糟的东西,不过不用在意太多,我们瞄准第一行的URL!把ta复制,然后在浏览器里访问一下。是这个xml文件没错了!(看看非酋们的弹幕? )

可是B站怎么获取到的弹幕呢?这时再来看另一个response


就在包含着弹幕的response的上面不远处就有一个pagelist开头的部分这里的aid号码和av号是对应的!
而从他的Preview中可以发现,里面的cid号码和包含弹幕的文件里的oid信息也是一样的!
综上可以得出,这个过程类似于,请求->pagelist巴拉巴拉->aid->cid->oid->弹幕。

开始肝代码

首先的任务就是获取cid,如下

def get_cid(av):av = av.strip('av')url = f'https://api.bilibili.com/x/player/pagelist?aid={av}&jsonp=jsonp'  #根据av号获取cid,aid号码和av号相同,所以可以直接使用res = downloadPage(url)res_text = res.text #获取源码!res_dict = json.loads(res_text)cid = res_dict['data'][0]['cid']return cid

这之后就要根据cid请求弹幕

# 根据cid请求弹幕
def get_dan_mu(cid):url = f'https://api.bilibili.com/x/v1/dm/list.so?oid={cid}'res = downloadPage(url)res_xml = res.content.decode('utf-8') #因为是中文所以需要设置编码格式防止乱码pattern = re.compile('<d.*?>(.*?)</d>') #这里用到了正则表达式,来获取我们需要的那一部分内容dan_mu_list = pattern.findall(res_xml)return dan_mu_list #返回弹幕列表

最后就是要把弹幕写进我们的文件里!这个就很简单了

# 把弹幕写入到文件中
def save_to_file(dan_mu_list, filename):#filename是保存文件的名称,dan_mu_list就是弹幕列表嘛with open(filename, mode='w', encoding='utf-8') as f:for one_dan_mu in dan_mu_list:f.write(one_dan_mu)f.write('\n') #写入的时候别忘记了回车

主函数

def main(av):# 根据视频av号获得cidcid = get_cid(av)# 根据cid爬取弹幕dan_mu_list = get_dan_mu(cid)# 把弹幕写入到文件中save_to_file(dan_mu_list, f'{av}.txt')if __name__ == '__main__':av = 'avxxxxxxxxx' #"xxxxxxxxx"就是你想要收集弹幕的视频的av号dan_mu_spider(av)

源代码合并起来就是下面这样,总的来说还是非常好理解的,参考了不少CSDN大佬和B站的爬虫入门视频,Computer Science实在是高深,继续努力吧

import json
import re
import requests# 下载页面
def download_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}res = requests.get(url=url, headers=headers)return resdef get_cid(av):av = av.strip('av')url = f'https://api.bilibili.com/x/player/pagelist?aid={av}&jsonp=jsonp'res = download_page(url)res_text = res.textres_dict = json.loads(res_text)cid = res_dict['data'][0]['cid']return cid# 根据cid请求弹幕
def get_dan_mu(cid):url = f'https://api.bilibili.com/x/v1/dm/list.so?oid={cid}'res = download_page(url)res_xml = res.content.decode('utf-8')pattern = re.compile('<d.*?>(.*?)</d>')dan_mu_list = pattern.findall(res_xml)return dan_mu_list# 把弹幕写入到文件中
def save_to_file(dan_mu_list, filename):with open(filename, mode='w', encoding='utf-8') as f:for one_dan_mu in dan_mu_list:f.write(one_dan_mu)f.write('\n')# 弹幕爬虫主流程
def main(av):# 根据视频av号获得cidcid = get_cid(av)# 根据cid爬取弹幕dan_mu_list = get_dan_mu(cid)# 把弹幕写入到文件中save_to_file(dan_mu_list, f'{av}.txt')if __name__ == '__main__':av = 'av77794648'main(av)

最后结果就是这样的

爬虫成功!奇怪的知识增加了!考虑之后再出一个生成词云的教程。

有喜欢的可以加个关注或者B站加个关注吧,本菜鸟陆续会上传一些自制的编程的视频,哈哈哈哈哈就是不知道这么多大佬看不看得上啦!做的不好的还请不要喷

最后说一下,如果实在是求速度的,可以直接使用Python的you-get库爬取弹幕、下载视频,而且应用的范围也非常广,特别方便。

菜鸟弟弟从零开始的爬取Bilibili弹幕的Python爬虫教程-哔哩哔哩 - ( ゜- ゜)つロ 干杯~相关推荐

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

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

  2. python爬取bilibili弹幕_Python抓取BiliBili拦河坝并生成单词云,爬取,bilibili,弹幕

    木秀于林,风亦惧之:虽为萤火,亦绽光芒. Python爬取bilibili弹幕并生成词云 目标网站: 哔哩哔哩: https://www.bilibili.com/ 我这里以 TES vs SN 第四 ...

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

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

  4. 今天分享个用Python爬虫爬取Bilibili弹幕的小例子解析

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

  5. python爬取bilibili弹幕_python爬虫:bilibili弹幕爬取+词云生成

    如果你懒得看下边的文字,我录了一个完整的教学视频在b站上. 我的B站教学:https://www.bilibili.com/video/av75377135?p=2 工作原理 b站是提供弹幕接口的,所 ...

  6. python爬取bilibili弹幕_用Python爬取B站视频弹幕

    原标题:用Python爬取B站视频弹幕 via:菜J学Python 众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一 ...

  7. python爬取bilibili弹幕_GitHub - yxwangnju/Bilibili-Bullet-Screen-Crawler: 一个爬取bilibili上弹幕的简单python程序...

    Bilibili Bullet Screen Crawler 用python语言实现了一个简单的哔哩哔哩弹幕爬虫程序. 1. 运行环境 python 3 and higher versions. 运行 ...

  8. python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜

    利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...

  9. 使用Python爬虫爬取简单网页(Python爬虫入门)

    今天我们来看一看使用Python爬取一些简单的网页. 所用工具:IDLE (Python 3.6 64-bit) 一. 爬取京东商品页面 我将要爬取的是这个东京商品页面信息,代码如下: import ...

最新文章

  1. 微信小程序 python接口_微信小程序-封装请求基准路径、接口API 和使用
  2. 终于可以光明正大的推别人了
  3. 使用迁移学习不断的自我纠正神经网络
  4. 月薪5K的运维小白如何成为月薪5W的高级架构师?
  5. tensorflow随笔 -QueueRunner
  6. 无线路由器——多路由器无线桥联解决方案
  7. 两种过年烟花,你喜欢哪一种(HTML+CSS+JS)
  8. Linux操作系统中Anaconda的安装
  9. 二分查找算法举例说明C语言,C语言快速排序与二分查找算法示例
  10. cannot be deleted directly via the port API: has device owner network:floatingip
  11. 编程语言c 是什么意思,C/C++知识点之C语言中%*s,%*c 是什么意思
  12. getSystemService
  13. Java高并发编程详解系列-单线程执行设计模式
  14. 阿里云物联网平台python开发手册_阿里云物联网平台之云端API调用(即云端开发教程)...
  15. 常用的Wi-Fi产品调试测试工具
  16. ECharts 全新大版本 4.0 正式发布
  17. 在线hash密码破解网站列表
  18. jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
  19. 华为HG8245C光猫破解开启原始管理页面
  20. 保卫萝卜迅玩版53关php,2018微信保卫萝卜迅玩版第50关攻略

热门文章

  1. 【飞鱼科技】最新社招信息
  2. dedecms采集基础篇
  3. 织梦dedecms 采集笔记
  4. SDN 实验室学生们
  5. 学习一下怎么加入自己的图片,用QQShow做一下试验~~~~~~~~~~
  6. 微信小程序——自定义组件
  7. 基于网络爬虫的负面信息搜集系统
  8. 卡斯柯经验谈│流程驱动项目管理的应用
  9. 在Windows XP中为Android 4.0设备安装MTP驱动程序
  10. 【QT实现TCP和UDP协议通信(一)】