一、定时任务的基本使用
- 在app文件夹下新建一个schedule文件夹,并在下面建立一个watchfile.js(可以自定义)
const Subscription = require('egg').Subscription; let i = 0; class WatchFile extends Subscription { static get schedule() { return { interval: '1s', type: 'all' // 指定所有的进程都需要执行 } } async subscribe() { i++; console.log(i); } } module.exports = WatchFile; 复制代码
- 控制台将每隔1s打印下面的内容
- 下面是一种简写的方式
let i = 0; module.exports = { schedule: { interval: '1s', // 1 分钟间隔 type: 'all', // 指定所有的 worker 都需要执行 }, async task(ctx) { i++; console.log(i); }, }; 复制代码
二、定时爬取指定网页的内容
- 安装cheerio模块
这个模块能够解析HTML页面的内容,使用的是JQuery语法。
npm install cheerio 复制代码
- 导入模块
const cheerio = require('cheerio'); 复制代码
- 在服务中定义爬虫模块spider.js
'use strict'; const Service = require('egg').Service; class SpiderService extends Service { async requestUrl(url) { const result = await this.ctx.curl(url); return result; } } module.exports = SpiderService; 复制代码
- 定时任务解析服务获取到的内容
module.exports = { schedule: { interval: '1s', // 1 分钟间隔 type: 'all', // 指定所有的 worker 都需要执行 }, async task(ctx) { const url = "https://news.baidu.com"; const result = await ctx.service.spider.requestUrl(url); const htmlData = result.data.toString(); const $ = cheerio.load(htmlData,{decodeEntities: false}); $('.hotnews a').each(function() { console.log($(this).html()); }) }, };