实现的功能(同样适用于网站监控):
每隔一段时间更新一次网站数据。
1、每隔一段时间执行一次操作,所以需要建立一个定时器。
注意:
1、eggjs官方规定,定时器只能写在schedule目录下
2、cheerio模块主要负责解析html
3、使用之前需要安装 npm install --save cheerio
// app > schedule > watchPage.js
const cheerio = require('cheerio')
module.exports = (app) => {
return {
schedule: {
interval: '5s', //5s间隔
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
var url = 'https://news.baidu.com/'; // 以爬取百度新闻为例
const list = await ctx.service.spider.spider(url);
// toString是为了解析出buffer数据
const pageXml = list.data.toString();
// decodeEntities参数是为了解决cheerio获取的中文乱码
const $ = cheerio.load(pageXml, {decodeEntities: false});
// 爬取某一个列表数据
$('.hotnews a').each(function () {
var text = $(this).html();
console.log(text);
})
}
}
}
2、获取数据的操作统一放在service下:
// app > service > spider.js
'use strict';
const Service = require('egg').Service;
class SpiderService extends Service {
async spider(url) {
const result = await this.ctx.curl(url);
return result;
}
}
module.exports = SpiderService;
结果展示:
号外:如果做网站监控,可以监听网站数据是否被篡改或网站是否正常运行,若出现异常则发送短信给开发人员提醒。