最近又在网上看到一个 node 爬妹纸图的东西,去看了下源码,写的其实太啰嗦了。
其实 node + got + async/await
才是王道。
由于之前做了个 B站看板娘集合 的东西,所以就写个爬虫爬了下直播间。
数据分析
先分析下B站直播间的情况,打开全部直播页面 https://live.bilibili.com/all 看下 Network 模板。
很容易发现他的数据是 ajax 过来的 https://api.live.bilibili.com/room/v1/room/get_user_recommend?page=1,运气真好,都不需要写正则匹配数据了。
我们需要的目标数据是在直播页面中的模型数据。
例如 https://live.bilibili.com/271744 直播间中模型地址为 https://api.live.bilibili.com/live/getRoomKanBanModel?roomid=271744
这是我们要的数据目标数据。
那么简单了,在列表页的 /room/v1/room/get_user_recommend
接口中,一页有30个房间,其中的 roomid 就是我们要的房间号,有了这个,我们就可以直接获取到模型数据了。
房间 列表数据 和 模型数据 这里就不展开说明了,json数据比较占篇幅。
步骤就是:
- 遍历列表页面 1-100 页
- 遍历每页的30个房间 roomid
- 获取房间看板娘模型中的服装资源
开始爬取
这里用到 got 模块,它是 request 的替代品,配合 async/await
食用风味更佳。
1 | const got = require('got'); |
这里是主要核心代码,数据去重 和 保存数据 部分没写,为了看起来更加干净。
因为数据抓取部分代码就这么点,这是爬虫核心代码,不到20行。
保存数据,你可以随意。
这里是完整的爬虫代码 https://github.com/52cik/bilibili-haruna/blob/master/fetch.js
完整的代码里加了 ua + referer 参数,简单伪造浏览器。
小结
当然,这只是个简单爬虫脚本,没做并发,也没做并发控制。
但作为简易爬虫入门学习,这是最理想的方式了。