Cheerio 是 node.js 的抓取页面的模块,为服务器特别定制的,快速、灵活、适合各种 Web 爬虫程序,可以让我们用 JQuery 语法来解析爬取的网页数据。
1. 安装模块。
cnpm i cheerio --save
2. 引入模块。
var cheerio = require('cheerio');
3. 加载要解析的内容,并处理汉字乱码问题。
const $ = cheerio.load('<h2 class="title">你好,世界!</h2>',{
decodeEntities: false
})
4. 获取解析的内容中某一个节点的数据。
$('title').html()
5. 定时抓取实例。
定时抓取一个网站的数据,判断网站是否被篡改。
定义抓取服务。
// app/service/spider.js
'use strict';
const Controller = require('egg').Controller;
class SpiderController extends Controller {
async requestUrl(url) {
var result = await this.ctx.curl(url);
return result;
}
}
module.exports = SpiderController;
定义定时任务。
// app/schedule/watchDoamin.js
var cheerio = require('cheerio');
module.exports = (app) => {
return {
// 任务配置
schedule: {
interval: '5s',
type: 'all'
},
// 执行的任务
async task(ctx) {
// 监控的网站
var url = "https://news.baidu.com/";
// 调用服务抓取数据
var result = await ctx.service.spider.requestUrl(url);
// 将数据改为字符串格式的
var htmlData = result.data.toString();
// 解析数据
const $ = cheerio.load(htmlData, {
// 处理汉字乱码情况
decodeEntities: false
});
var title = $('title').html();
// 判断网站是否被篡改
if (title != '百度新闻——全球最大的中文新闻平台') {
console.log('网站挂掉了或者被修改了');
} else {
console.log('正常')
}
}
}
}