1、爬取百度新聞數據。javascript
①首先看下咱們要爬取的網站數據:news.baidu.comhtml
②首先在service>spider.js下寫入以下方法,寫一個requestUrl方法 傳入url並獲取數據。java
"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;
③schedule下新建一個定時任務watchdomin,寫入以下方法,每5s調用一次數據:node
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); } }; };
④由控制檯可知,爬取到了數據:jquery
⑤對spider.js稍做改動,則可知打印出來的數據是一堆頁面信息。npm
2、檢測網站是否掛掉。服務器
首先介紹cheerio模塊:app
cheerio是nodejs的抓取頁面模塊,爲服務器特別定製的,快速、靈活、實施的jQuery核心實現,適合各類Web爬蟲程序。dom
通俗地講:cheerio模塊能夠讓咱們用jquery語法來解析爬取的網頁數據。curl
https://www.npmjs.com/package/cheerio
cheerio的用法:
①安裝cnpm i cheerio --save
②加載要解析的內容 const $ = cheerio.load('<h2 class="title">Hello World</h2>')
③$('title').html() 獲取要匹配的標題內容。
將watchdomin.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); console.log($("title").html()); } }; };
可得打印出來的title是一堆亂碼,那麼,如何解決呢?load方法裏面穿入一個配置參數{ decodeEntities: false },則打印出正常中文。
實現相似網站監控,看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("正常"); } } }; };
爬取其餘數據的基本寫法,與jquery基本相似。
打完收工。