说起来可能有点奇怪,我写了个 NodeJS 爬虫
nodejs 这玩意,写法基本上和 js 是差不多的。
想着到时候微服务跨语言调用的时候说不准也能有机会用到,就看了看。
也挺简单的,如果是指增删改查之类的话。
不过起个服务、写写增删改查着实没意思,所以今天写了个爬虫玩玩
git地址: https://github.com/skypyb/anime-spider
运行起来(如果你的电脑有node环境的话):
git clone https://github.com/skypyb/anime-spider.git npm install node main.js
说明:
- 主要是采用事件机制监听爬虫数据, 方便做聚合等操作
- 现在的话只能爬一下B站和bangumi的,MAL和SATI 之后再看吧,没空写了
- 现在都是一页页的爬,之后改成异步爬虫 ( B站爬的还是挺快的,毕竟是API请求。 bangumi这种后端渲染出来的HTML页面爬起来是有点慢 )
main.js:
const excutor = require('./spider/excutor');
excutor.registrListener('spider.animerank.bilibili', adminInfos => {
/*
array(adminInfos) element:
BilibiliAnime {
name: '天降之物Final 我永远的鸟笼',
imgUrl: 'http://i0.hdslb.com/bfs/bangumi/b00b6cecf7a476bcf9980a231814f46782b3d059.jpg',
score: '9.8',
badge: '',
mediaId: 973,
rank: 198
}
*/
//do..
// console.log(adminInfos);
});
excutor.registrListener('spider.animerank.bangumi', adminInfos => {
/*
array(adminInfos) element:
BangumiAnime {
name: '少女与战车 剧场版',
imgUrl: '//lain.bgm.tv/pic/cover/l/76/f3/72266_p0Nxo.jpg',
score: '8.4',
id: 'item_72266',
rank: 48,
desc: '1话 / 2015年11月21日 / 水島努 / 杉本功',
raterNum: 3183
}
*/
//do...
// console.log(adminInfos);
});
// execute spider
excutor.bilibili();
excutor.bangumi();
能获取到的数据
- bilibili 的番剧排行榜-评分正序
- 事件
spider.animerank.bilibili
- 事件
- bangumi 的动画排行榜-评分正序
- 事件
spider.animerank.bangumi
- 事件
依赖
- superagent: HTTP请求
- cheerio : Dom解析
kusa,居然和我做的爬虫一模一样的功能(*/ω\*)