[新手教程]手把手教你写简单爬虫1
上周实现了一个无聊的功能,把彩票(只爬大乐透)中奖号码定时发送到邮箱,由于邮件也能马上收到,还是有跟短信一样的功效。
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之类的工具保证其运行等