egg解析html怎么指定数据,egg学习笔记第十六天:eggjs爬取数据并监控网站是否被篡改...

54142e9e2cec5f931da97ded9dd33f42.png

一、爬取百度新闻数据。

①首先看下我们要爬取的网站数据:news.baidu.com

a2c05e35dde81eccd5e62426c6bbff19.png

②首先在service>spider.js下写入如下方法,写一个requestUrl方法 传入url并获取数据。

"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;

f92f227ea747fdf077b14364d86cf03f.png

③schedule下新建一个定时任务watchdomin,写入如下方法,每5s调用一次数据:

70c02a9bc6211aa085a67c7d4371468e.png

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);

console.log(result);

}

};

};

④由控制台可知,爬取到了数据:

4159163f1e09fde8a1bd59d34d252757.png

⑤对spider.js稍作改动,则可知打印出来的数据是一堆页面信息。

be6623618962d102e06a751c352a84e8.png

二、检测网站是否挂掉。

首先介绍cheerio模块:

cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现,适合各种Web爬虫程序。

通俗地讲:cheerio模块可以让我们用jquery语法来解析爬取的网页数据。

cheerio的用法:

①安装cnpm i cheerio --save

②加载要解析的内容 const $  = cheerio.load("

Hello World

")

③$("title").html()  获取要匹配的标题内容。

将watchdomin.js做一些修改:

d50ae213a6ca1b213a83d47c1de3efeb.png

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);

console.log($("title").html());

}

};

};

可得打印出来的title是一堆乱码,那么,如何解决呢?load方法里面穿入一个配置参数{decodeEntities:false},则打印出正常中文。

1c8f3783fba398266b3571404ecaf161.png

实现类似网站监控,看title的值有无被篡改:

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("正常");

}

}

};

};

f333cfc5a6dcffd3bb09fdb5994ad007.png

爬取其他数据的基本写法,与jquery基本类似。

f9a36c55c58c93c20ed1c64f5e5889bd.png

打完收工。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值