文章目录
  1. 1. 前言
  2. 2. 具体实现

前言

最近在帮一个app做后端方面的工作,遇到需要从第三方网站爬取信息的需求,很爽的是,这个第三方网站直接就开放了数据接口,只需要爬取就行,不需要分析页面DOM。需求提出者提出需要做周期爬虫,即每个一分钟或两分钟就抓取数据一次(第三方网站保证每次抓取的数据都不同)。刚开始接触这个需求就想着用setInterval来实现。后来考虑了之后的延伸,之后可能会做一些定时任务,例如每晚十二点之前统计用户自动生成报表之类的需求,所以就放弃了之前的想法,装而投向之前用过的一个三方库——cron

git地址: https://github.com/ncb000gt/node-cron

使用前安装

1
2
//install
$ npm install cron

具体实现

目标链接:

从链接看出是直接返回json数据,所以避免了很多分析。
简单分析一下第三方网站的http headers,如下图
http headers

接下来是直接利用cron来实现定时任务了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var CronJob = require('cron').CronJob;

//文本笑话抓取
new CronJob('0 */1 * * * *',function(){
var options = {
host:"api.laifudao.com",
method:'GET',
path:"/open/xiaohua.json",
headers:{
"Accept":"application/json",
"Content-Type":"application/json;charset=utf-8",
"Cache-Control":"max-age=0"
}
};
var req = http.request(options,function(res){
var html = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
html += chunk;
});

res.on('end', function() {
//console.log(html);
var dataJson = {};
try {
dataJson = JSON.parse(html);
//dataJson = JSON.parse(getJsonFormat(html));
} catch(error) {
console.log(error);
return;
}
//console.log(dataJson);
//do something
});
});
// listen in error
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
return;
});

req.end();
},null,true,null);

//这里简要说明一下CronJob的五个参数

  • 参数1:时间设置,跟linux系统上的/etc/crontab一致,分别代表秒(0-59)分(0-59)时(0-23)天(1-31)月(0-11)星期(0-6)。如果想每隔一段时间执行一次,可以用*/n。例如上面就是每隔一分钟执行一次。
  • 参数2:方法,具体的定时任务实现。
  • 参数3:方法,参数2停止的时候触发。
  • 参数4:是否立刻执行。
  • 参数5:地区设置
文章目录
  1. 1. 前言
  2. 2. 具体实现