B站真的是一个神奇的地方,初次用Python爬取弹幕。
“网上冲浪”“886”“GG”“沙发”……如果你用过这些,那你可能是7080后;
“杯具”“神马”“浮云”“偷菜”……如果你用过这些,你可能是8090后;
“吃瓜群众”“一亿小目标”“蓝瘦,香菇”“主要看气质”……如果你用过这些,你可能是9000后;
“awsl”“逮虾户”“律师函警告”“挖藕”……如果你了解这些,你可能……
是混b站的吧!
大家好,我是大鹏,一位勉强通过b站会员考试的普通会员。
众所周知,b站弹幕是流行用语爆发的天堂,如果有一天你发现公司群里95、00后说话都听不懂了,来b站看看弹幕是很好的补习方式。可问题是,这么多视频这么多弹幕该从何看起呢?
数据分析师要有数据分析师的亚子,今天我就教大家用Python零基础来爬一爬这个小破站的弹幕,快速学习一些流行用语(完整教程代码会在文末放出)。
弹幕哪里找?
平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的:
XML和JSON、YAML一样是一种通用的标记信息表达方式,可以简单的理解为一种记录数据的格式。XML和描述网页的语言HTML非常像,所以你会在截图中看到这样的标签。了解更多可以查看教程:https://www.runoob.com/xml/xml-intro.html
那么上图这个弹幕文件的url是什么呢?
https://comment.bilibili.com/92542241.xml
它以一个固定的url地址+视频的cid+.xml组成。只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了(b站大部分网页给出的字幕限制是1000条)。
一个视频的cid在哪里呢?右键网页,打开网页源代码,搜索cid”就能找到:
cid在网页源码中是一个很常见的词组,而我们要寻找的正确的cid都会写成"cid":xxxxxxxx的形式。为了缩小搜索范围,在后方加上一个引号会更快搜索到。
有了正确的cid,拼好url,我们就来写爬虫吧!
爬虫库到底是什么?
基本所有初学Python爬虫的人都会接触到requests、BeautifulSoup这两个工具库,这是两个常用基础库。requests用于向网站url发起请求,以获取网页代码;BeautifulSoup用于将HTML/XML内容解析,并提取里面的重要信息。
这两个库模拟了人访问网页,读懂网页并复制粘贴出对应信息的过程,能够批量地、快速地完成数据爬取。
开始爬取
观察网页,可以发现,所有的弹幕都放在了标签下,那么我们需要构建一个程序获取所有的标签:
第一步,导入requests库,使用request.get方法访问弹幕url:
import requests
获取页面数据html
url=r'https://comment.bilibili.com/78830153.xml'
r=requests.get(url)#访问url
r.encoding='utf8'
第二步,导入BeautifulSoup库,使用lxml解析器解析页面:
from bs4 import BeautifulSoup
解析页面
soup=BeautifulSoup(r.text,'lxml')#lxml是常用的解析器,需要提前使用pip工具安装lxml库
d=soup.find_all('d')#找到所有页面的d标签
print(d)
这样操作后,所有藏在d标签里的弹幕内容就被python抓取到了 :
解析完成后,接下来第三步就是运用Python基础函数中的for函数,将单条数据装进字典,再将所有字典装进一个列表:
解析弹幕,将弹幕、网址、时间整理为字典,最后加和成列表,共1000条数据
dlst=[]
n=0
for i in d:
n+=1
danmuku={}#将单条数据装进字典
danmuku['弹幕']=i.text
danmuku['网址']=url
danmuku['时间']=datetime.date.today()#需要先导入datetime库
dlst.append(danmuku)#将所有字典装进一个列表
print('获取了%i条数据' %n)
print(dlst)
此时整理好的弹幕数据如下,是不是已经有点常见的excel数据的意思了?
那我们就把它变得更加像excel数据吧!第四步导入大名鼎鼎的pandas库,一行代码将列表数据转为DataFrame数据,并保存到本地,爬虫的大体框架就完成了:
import pandas as pd
将列表变为DataFrame,使用pandas进行分析
df=pd.DataFrame(dlst)
df.to_excel('b站弹幕数据.xlsx')#讲爬下来的数据放在excel里
多个弹幕网址怎么爬?
没错,这个爬虫还存在很多可以优化的地方,比如是不是可以爬取多个弹幕?是不是可以封装起来,输入cid就出来结果呢?
当然可以。只要我们熟练掌握def定义函数功能,就可以把上述的爬虫功能写成一个爬取函数:
一键爬取一时爽,一直一键一直爽,完整代码就在文末,大家自己爽吧。
弹幕可以做什么分析?
鬼畜区出来的流行词永远是最有脑洞的,所以本文以最近很鬼畜的“巴啦啦小魔仙口胡”视频弹幕为例,教授流行用语:
首先看看,发弹幕的小伙伴有多少是话痨呢?
虽然大部分的弹幕都在10个字内解决,但平均来看大家会使用9.8个左右的字表达吐槽,最长的一位同学弹幕字数长达100字。10个字在平时说话可能就是一个短句,但是放在弹幕上已经是很长的一串了,看来刷弹的话痨还是很多的。
那么这些话痨都在说什么呢?
字数最多的前二十位同学就是在笑,沉浸式的大笑,果然人类的本质就是复读机:
既然说到复读机,除了哈哈哈以外,还有哪些词是经常被复读的呢?
“合影”“亚子”“雨女无瓜”“名场面”……不得不说这个小破站的网友脑洞清奇。有了这个,妈妈再也不愁我跟不上00后的步伐了。
B站真的是一个神奇的地方,初次用Python爬取弹幕。的更多相关文章
- python爬取B站视频弹幕分析并制作词云
1.分析网页 视频地址: www.bilibili.com/video/BV19E… 本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀. 这次我选取的是自己 唯一的爆款 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- python爬取b站排行榜
爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...
- 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!
众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...
- python爬取某站磁力链
不同磁力链网站网页内容都不同,需要定制 1,并发爬取 并发爬取后,好像一会就被封了 import requests from lxml import etree import re from conc ...
- Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫
如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:P ...
- 【Python爬虫案例】用Python爬取李子柒B站视频数据
一.视频数据结果 今天是2021.12.7号,前几天用python爬取了李子柒的油管评论并做了数据分析,可移步至: https://www.cnblogs.com/mashukui/p/1622025 ...
- 使用python爬取P站图片
刚开学时有一段时间周末没事,于是经常在P站的特辑里收图,但是P站加载图片的速度比较感人,觉得自己身为计算机专业,怎么可以做一张张图慢慢下这么low的事,而且这样效率的确也太低了,于是就想写个程序来帮我 ...
- 我用 Python 爬取微信好友,最后发现一个大秘密
前言 你身处的环境是什么样,你就会成为什么样的人.现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界.你所处的朋友圈是怎么样,慢慢你的思想也会变的怎么样.最近在 ...
随机推荐
- Python基础--Redis基础
字符串: setnx: 若没有则设置 setex: setex key exit_time value [设置其删除时间] setrange: setrange key index replace_v ...
- 【例题 4-5 uva 512】Spreadsheet Tracking
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个操作对与一个点来说变化是固定的. 因此可以不用对整个数组进行操作. 对于每个询问,遍历所有的操作.对输入的(x,y)进行相应的变 ...
- 【hihocoder 1473】小Ho的强迫症
[题目链接]:http://hihocoder.com/problemset/problem/1473 [题意] [题解] 假定初始为在在0位置(相对它左边那条线); 则考虑; 多少步之后,人又能这到 ...
- SpringBoot支持AJAX跨域请求
利用注解的方式解决AJAX请求跨域问题 1.编写一个支持跨域请求的 Configuration - 第一种方式 - CorsConfig.java import org.springframework ...
- 关于double类型数字相加位数发生变化的问题
因为计算机内部存贮本身的缺陷,导致double类型的数字相加.得到的结果有非常多位,比方 774.23 750.0 2638.66 4162.889999999999 看到这个是不是非常晕 当然 ...
- 为什么pthread_cond_wait须要传递mutex參数
这是来自知乎的一个问题,由@吴志强提出,有意思的是,他看了大家的回答后,突然顿悟了,同一时候也发现有人答错了,于是乎.他自己回答了自己的问题. 我看完后.发现他分析的非常精彩,于是就记录在这.以下是他 ...
- TCP/IP解析(一):TCP/IP的工作方式
本文包括下面内容: 1.TCP/IP协议系统 2.OSI模型 3.数据包 4.TCP/IP的交互方式 1.TCP/IP模型的协议层 分为四层: 网络訪问层:提供与物理网络连接的接口.依据硬件的物理地址 ...
- 【转】selenium自动化测试环境搭建
转:http://blog.csdn.net/mao1059568684/article/details/17347853 第一步 安装JDK JDk1.7. 下载地址:http://www.orac ...
- objective-c 中数据类型之四 字典(NSDictionary)
// 1. 字典初始化.赋值方式1 NSMutableDictionary *m_dictionary = [[NSMutableDictionary alloc] initWithCapacity: ...
- 关联查询之map的延伸使用方法
<select id="front.sort.selectListall" parameterType="myshop.services.front.sort.be ...