作者简介
HeoiJin:立志透过数据看清世界的产品策划,专注爬虫、数据分析、产品策划领域。
万物皆营销 | 资本永不眠 | 数据恒真理
CSDN:https://me.csdn.net/weixin_40679090
目录
系列目录
二次元属性被稀释,B站还剩什么?
- 上篇—爬虫篇:爬取B站30日榜单(包括全站榜和各分区榜单)
- 下篇—对比分析及可视化篇:对爬取到的数据进行对比分析和可视化
- 番外篇—相关性分析篇:对用户行为,排行榜综合得分算法进行相关性分析
本篇目录
一、项目背景
二、工具和环境
三、需求分析
四、页面解析
五、爬虫分析
六、爬虫编写
七、本篇小结
一、项目背景
最近看了一篇对B站2019年数据解读的文章,文章最后得出结论:B站的二次元属性已被稀释,逐渐走向大众。那么走过2020年的春节后,二次元属性的稀释情况如何?什么分区是B站的龙头?b站的主流用户喜欢什么标签的视频?各分区的情况能带来什么社会价值?本项目将通过数据带你一起窥探B站的变化。
1.1 项目特色:
1、 利用Scrapy框架进行网页爬取
2、 利用pandas、numpy进行数据分析
3、 利用pyecharts进行数据可视化
4、 利用scipy进行相关性分析
二、工具和环境
- 语言:python 3.7
- IDE:Pycharm
- 浏览器:Chrome
- 爬虫框架:Scrapy 1.8.0
三、需求分析
B站是我们熟悉的弹幕视频分享网站,根据百度百科的资料显示,B站的主要业务包括直播、游戏、广告、电商、漫画、电竞。1 在这么多项的业务当中,我们不难看到一个共同点,B站的主要盈利模式是高度依赖用户,其次是主播和UP主。因此要分析B站的变化,就要从用户喜爱变化情况切入分析,本次项目将采集以下数据:
1、 排行榜的分区名
2、 排行页:视频的标题、作者、综合评分、排名、视频链接
3、 详情页:视频的播放量、三连量、评论量、弹幕量、转发量、热门标签
四、页面分析
4.1 排行榜页解析
首先从排行榜页面进行过分析。禁用Javascript后,发现要提取的信息都是在静态网页当中,那么在编写代码的时候通过xpath定位抓取信息即可。
完成单个分区排行榜页面的分析后,只需找到各排行榜对应的url即可实现爬取多个分区。通过检查网页源码,发现每一个分区都只有文字描述,并没有相关的url,因此通过分析url变化再自行构造请求的url。
url规则即对应编号:https://www.bilibili.com/ranking/all/编号/0/30
分区 | 编号 |
---|---|
全站 | 0 |
动漫 | 1 |
国创 | 168 |
音乐 | 3 |
舞蹈 | 129 |
游戏 | 4 |
科技 | 36 |
数码 | 188 |
生活 | 160 |
鬼畜 | 119 |
时尚 | 155 |
娱乐 | 5 |
影视 | 181 |
这里创建一个编号的列表,并用循环拼接url即可完成url的批量生成
from pprint import pprint
labels_num=[0,1,168,3,129,4,36,188,160,119,155,5,181]
url_list=[f'https://www.bilibili.com/ranking/all/{i}/0/30' for i in labels_num]
#利用pprint方法,我们能够在输出时实现一个url一行
pprint(url_list)
4.2 详细信息页面api解析
我们还需要获取视频的播放量、三连量、评论量、弹幕量、转发量、热门标签,但在排行榜页中并没有体现,因此要进一步请求视频的详情页。
进入视频详情页,同样禁用Javascript后,可以发现要找的信息都是ajax异步加载的,在这里考虑抓取api文件来获取信息,这样能够大大提升解析网页的效率,也不容易被封ip。
通过一轮的分析之后,找到了视频的播放量、三连量、评论量、弹幕量、转发量数据在stat?aid=文件当中,url末端的数字即视频的id,后续对视频链接进行切片获取id再拼接Request URL即可。
访问该Request URL,是标准的json数据。
对数据页面进行json解析,后续只需获得键:['data ']下的数据即可
到这里还缺少了热门标签的数据,继续抓包找到另外一个api的url,同样需要通过视频的id进行url构造。
但直接访问这个url,会显示要找的页面不存在。观察url发现,?后包含了很多参数,尝试仅保留关键的视频id参数再次访问后,能够获取需要的信息。也是非常工整的json数据。
解析json后,只需要获取键[“data”]下的所有['tag_name ']即可。
那么到这里,所有需要的url及相关定位信息都基本找到,下面就可以开始编写爬虫文件了。
五、爬虫分析
5.1 Scrapy框架爬虫概述
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。2
Scrapy架构图(绿色箭头为数据流向)
本次项目涉及的组件介绍
Scrapy Engine
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
调度器(Scheduler)
调度器从引擎接收request并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spider。
Spiders
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。
Item Pipeline
Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)
5.2 为什么用Scrapy框架爬虫
Scrapy 使用了异步网络框架来处理网络通讯。相比于普通的Request爬虫或者多线程爬虫,Scrapy在爬取页面上具有更高的效率(详细的效率比较可以看这篇《Python爬虫的N种姿势》)
同时完善的框架意味着只需要定制开发其中的模块就能轻松实现爬虫,有清晰的逻辑路径。
六、爬虫编写
如果之前还没有安装Scrapy,可在cmd中使用pip语句进行安装