背景双11期间,为了给主人囤猫砂和猫罐头,一直在刷豆瓣爱猫群的驱动帖,一边刷一边玩cod16,结果是错过了很多豪车,游戏KD也掉了不少。后来痛定思痛,把猫送了,耽误了我的金枪。我决定用整个小工具来愚弄师傅,让他意识到我要做的其实很简单。我写了一个爬虫,定期爬取有关键词的帖子,然后邮件通知我。虽说是随便玩玩,但接触一下实际工作中没怎么接触过的东西好不好?作为一个纯前端,当然是用到了node,使用puppeteer、nodemailer、node-schedule来实现代码的核心功能部分。为了方便查看,我提出了重点部分。其实就是几个工具的快速入门部分,难度基本没有。到底是为了忽悠入门学习?不合理的地方,大佬们喷的很猛,爬虫部分我受得了';constsleep=time=>newPromise(resolve=>{setTimeout(resolve,time);});//puppeteer文档地址:https://github.com/puppeteer/puppeteer/blob/v2.0.0/docs/api.md#pagegotourl-optionsconstqueryInfos=async()=>{constbrowser=awaitpuppeteer.launch({});constpage=awaitbrowser.newPage();page.goto(url,{waitUntil:'networkidle2',});awaitsleep(5000);//确保爬到某处,时间可以缩短constresult=awaitpage.evaluate(()=>{//eslint-disable-next-lineno-undefconst$=window.$;//我比较关心的关键字可以考虑扩展实现类似只匹配猫砂不匹配猫砂盒的东西,所以这里不会扩展constkeywords=/can|lunchbox|peak|desire|go|sand/;constpostList=$('.td-subjecta');constlinks=[];if(postList.length>0){postList.each((i,e)=>{consttitle=$(e).text();constlink=$(e).attr('href');constid=链接.match(/\d+/g).toString();if(keywords.test(title)){links.push({id,title,link,keywords:title.match(keywords),});}});}返回链接;});浏览器.close();returnresult;};邮件通知constnodemailer=require('nodemailer');constsmtpTransport=require('nodemailer-smtp-transport');consturl='https://www.douban.com/group/search?group=656297&cat=1013&q=Drive';constqqTransport=nodemailer.createTransport(smtpTransport({service:'QQ',auth:{user:'123@qq.com',//发件人地址pass:'',//授权码},}));constsendMail=function(num,content){qqTransport.sendMail({from:'123@qq.com',to:'456@qq.com',subject:`${num}辆新车上路`,html:content,},function(err,res){if(err){return;}console.log('发送成功',res);});};asyncqueryCarsList(){constlist=awaitgetInfos();让总计=0;让carList='';//注意一个sync/await更适合for(leti=0,len=list.length;i
