当前位置: 首页 > Web前端 > HTML5

从segmentfault爬取数据到使用koa2、vue全家桶、mongodb开发一个segmentfault

时间:2023-04-05 15:56:08 HTML5

前言线上环境小包总技术栈服务器:node、koa2客户端:vue、vuex、vue-router、Element-UI数据库:redis、Mongodb打包:webpack网站模块爬虫模块:用来爬取我看的一些文章,主要使用request、cheerio模块进行数据的爬取和处理,同时需要注意对爬取图片的处理文章模块:显示爬取的文章数据,并进行分类处理和展示登录注册模块:支持用户登录注册,访问第三方登录接口,使用nodemailer模块注册,进行邮箱验证留言模块:允许用户在本网站留下自己的脚注统计模块:统计网站访问量和其他数据爬虫模块segmentfault文章无需登录即可查看,所有可用的访问url均可获取文章内容。唯一需要注意的是请求的图片链接需要特殊处理。一开始我是盗链的形式,过了一段时间,segmentfault不允许盗链,只好从自己的网站加载。segmentfault中图片的src有?、&之类的特殊符号(应该是图片服务器的原因),没有图片后缀,所以我在爬取图片的时候需要处理特殊符号,加上后缀letimgError=false,imgPath=(imgSavePath+src).replace(/\?|\&/g,'_');//替换特殊符号letwriteFile=fs.createWriteStream(imgPath),extname;request(_src||(addr+src),{timeout:60000}).on('response',function(response){if(response.statusCode.toString().indexOf('4')==0){self.remove();imgError=true;resolve2();return;}extname=path.extname(response.request.path);//获取响应头中的文件后缀if(!extname&&response.headers['content-type'].indexOf('image')!=-1){extname='.'+response.headers['content-type'].split('/')[1];if(extname.indexOf('svg')!=-1){extname='.svg';}}让imgSrc=_src?来源:来源+分机名;self.attr('src',imgSrc);}).on('error',function(err){writeLog('请求图片失败:'+(_src||src)+'tourl:'+url,true);self.remove();imgError=真;reject2();}).pipe(writeFile);writeFile.on('finish',function(){if(imgError){return;}if(extname){letimgPath=(imgSavePath+src).replace(/\?|\&/g,'_');//添加后缀if(fs.existsSync(imgPath)){try{if(src.indexOf('.')!=-1){resolve2('withsuffix:'+src);return;}fs.renameSync(imgPath,imgPath+extname);writeLog('修改图片:'+imgPath+extname);}catch(e){writeLog('图片编辑失败原因:.'+src+extname+'\n'+e,true);}resolve2(imgPath+分机名);}else{writeLog('图片不存在:.'+src+'tourl:'+url,true);拒绝2(网址);}}});文章中的代码样式,需要使用高亮模块自己添加,然后将文章的关键信息,如文件的url,时间,作者,保存到数据库中,保存文章的真实htmlarticle作为一个文件,然后根据url加载本地html。注意网站使用的所有技术都是可以交流学习的,不要在在线环境下运行,因为源码中没有github的https相关文件config.js,qq授权登录需要配置mongodb账号密码自己写,只有读权限QQ交流群133240225、193572405