爬虫违法,注意尺度

Node 写爬虫的好处就是处理页面规则解析的时候更轻松,毕竟处理 Web 页面是 JS 的强项。

主要技术

  • nodemailer —— 用于发送邮件
  • superagent —— 模拟客户端请求
  • cheerio —— 类似 Jquery.js 用于页面 DOM 操作
  • moment —— 日期处理库,可选

主要思路

第一,我们需要封装一个统一的邮箱发送模块 mailer.js,主要使用 nodemailer 来发送邮件。这里大家需要准备一个支持 smtp 的邮箱账户和密码(现在很多邮箱服务商为了安全问题,都改成了授权码,需要登录邮箱后开启)。

第二,我们要有一个目标,也就是要爬取的目标页面地址。
第三,使用 superagentcheerio 实现爬虫程序 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 脚本,在服务器或自己的电脑上开户定时任务就好了。

有什么问题欢迎关注我的公众号找我哦。

标签: none

添加新评论