nodejs之eggjs结合cheerio爬取数据

实现的功能(同样适用于网站监控):

每隔一段时间更新一次网站数据。

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;

结果展示:
在这里插入图片描述
号外:如果做网站监控,可以监听网站数据是否被篡改或网站是否正常运行,若出现异常则发送短信给开发人员提醒。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值