[新手教程]手把手教你写简单爬虫1
发布于 2个月前 作者 coolicer 301 次浏览 来自 分享

上周实现了一个无聊的功能,把彩票(只爬大乐透)中奖号码定时发送到邮箱,由于邮件也能马上收到,还是有跟短信一样的功效。

var job = new CronJob({
  cronTime: '00 30 07 * * 2,4,7',  // 0 or 7 is sunday
  onTick: function() {
      async.waterfall([
          function(next) {
              getHTML(next);
          },
          function(body,next){
              parser(body,next)
          },
          function(html,next){
              getResult(html,next)
          }
      ], function (err, result) {
         sendMail(result)
      });
  },
  start: false,
  timeZone: 'Asia/ShangHai'
});

由于是我也是新手,看代码都已经很详细了。

var CronJob    = require('cron').CronJob, // 定时任务
    cheerio    = require('cheerio'),  // 爬内容
    nodemailer = require('nodemailer'), // 发邮件
    async      = require('async'),  // 做流程控制
    request    = require('request'),   //  取网页
    gbk        = require('gbk')   // 转编码

实现部分

   function getHTML(next) {
    var options = {
        url: 'http://kaijiang.500.com/dlt.shtml',  
        encoding: null
    }
    request(options, function (error, response, body) {
          if (!error && response.statusCode == 200) {
            next(null, body)
          }
    })
}
function parser(body,next) { 
    var result = gbk.toString('utf-8', body)
    next(null, result)
}
function getResult(html,next) {
     var $ = cheerio.load(html,{decodeEntities: false})
     var table = $('table.kj_tablelist02')
     var series = $('.span_left',table).text()
     var number = $('.ball_box01 ul', table).text()
         number = number.replace(/\s+/g, ' ')
     next(null, {series:series, number:number})
}
function sendMail(content,next) {
  var smtpTransport = nodemailer.createTransport({
        service: "QQ",
        auth: {
            user: "YOUR QQ",
            pass: "YouR QQ Password"
        }
    });
    //邮件选项设置
    var mailOptions = {
        from: "xxx", // 发件人地址
        to: "zzz", //多个收件人用,分隔
        subject: content['series'], // 主题
        html: "<h1>" + content['number']+"</h1>"
    }
    //发送
    smtpTransport.sendMail(mailOptions, function(error, response){
        if(error){
            console.log(error);
        }else{
            console.log("Message sent!");
        }
        smtpTransport.close();
    });
}

node.js 的好处有于工具,随便选上几个工具就可以搞定。这里我们选了几个必要的,一眼都可以看出来 。最后把它丢上自己的 vps,就等着收邮件吧,不过要注意一下 vps 的时区是否跟自己一样,还可以用 Pm2之类的工具保证其运行等

完整代码 https://gist.github.com/coolicer/a991d837621d370d509f

1 回复
回到顶部