Node | 10分钟搞定简易爬虫和邮件推送?
爬虫违法,注意尺度
用 Node
写爬虫的好处就是处理页面规则解析的时候更轻松,毕竟处理 Web
页面是 JS
的强项。
主要技术
- nodemailer —— 用于发送邮件
- superagent —— 模拟客户端请求
- cheerio —— 类似 Jquery.js 用于页面 DOM 操作
- moment —— 日期处理库,可选
主要思路
第一,我们需要封装一个统一的邮箱发送模块 mailer.js
,主要使用 nodemailer
来发送邮件。这里大家需要准备一个支持 smtp
的邮箱账户和密码(现在很多邮箱服务商为了安全问题,都改成了授权码,需要登录邮箱后开启)。
第二,我们要有一个目标
,也就是要爬取的目标页面地址。
第三,使用 superagent
和 cheerio
实现爬虫程序 spider.js
。
第四,编写定时脚本,让程序定时爬取页面数据并推送。
核心代码
mailer.js
封装一个node模块,提供给其它文件使用。
"use strict";
const nodemailer = require('nodemailer');
// options
// from: '尤点意思 <xxx@qq.com>'
// to: 'xxx@qq.com'
// subject: '你好,主题'
// text: '这里是文本内容,不支持HTML'
// html: '这里是支持HTML的内容。text和html选一'
exports.sendMail = async function sendMail(options){
let transporter = nodemailer.createTransport({
// https://nodemailer.com/smtp/well-known/
// 请查看官方文档
service: '126',
port: 465,
secure: true,
auth: {
user: '邮箱地址',
pass: '邮箱密码'
}
});
let info = await transporter.sendMail(options);
console.log('Message sent: %s', info.messageId);
}
spider.js
实现简单的爬虫逻辑
"use strict";
const superagent = require('superagent');
const cheerio = require('cheerio');
const moment = require('moment');
const mailer = require('./mailer');
// 抓包页面
const reptileUrl = "https://www.baidu.com/";
// 推送列表
const sendList = [
'xxx@qq.com'
];
superagent.get(reptileUrl).end(function (err, res){
let data = [], d = moment().format('YYYY-MM-DD');
let t = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(t);
// 抛错拦截
if(err){
console.error(err);
return;
}
/**
* res.text 包含未解析前的响应内容
* 我们通过cheerio的load方法解析整个文档,就是html页面所有内容,可以通过console.log($.html());在控制台查看
*/
let $ = cheerio.load(res.text);
mailer.sendMail({
from: '尤点意思 <xxx@126.com>',
to: sendList.join(','),
subject: '这里是标题',
text: '发送内容'
});
});
到这里,基本就完成了。接下来就是写一个 .sh
脚本,在服务器或自己的电脑上开户定时任务就好了。
有什么问题欢迎关注我的公众号找我哦。
评论已关闭