当前位置: 首页 > 后端技术 > Node.js

抖音图片一期

时间:2023-04-03 16:32:49 Node.js

换新公司了,没多少时间写博客了。最近看到抖音这么火,就想着要不要拍个“抖音图”,就这样拖拖拉拉的开始了。历时一个多月,终于如愿以偿。准备工作从某图片网站爬取了8万张图片,只爬取了链接(因为是链接,所以后面有些问题)把链接保存到本地mysql数据库,用express写一些接口。前端用react做这个滑动交互和首页刷新技术点击爬图片网站,我用的方法比较笨。中间是通过本地文件传输的,执行效率不是很好。为了防止对方反爬,我设置了一个定时器,2秒一次。直到第二天早上,攀登才结束。第二阶段会修改这个爬虫,优化Promise,希望一次性完成所有的爬虫工作。我用node做后端,用mysqlyi包,拼凑一条insert语句,把所有数据存进去。开始编写界面。我写了两个接口,一个是根据前端传过来的页数和每页的条数,然后去数据库进行分页查询①。我记得我上面提到我爬的都是图片链接。你访问别人的cdn镜像,别人肯定不高兴,所以有防盗链技术,当然有防盗链技术。我使用节点转发图像请求②。前端使用react+dva,首页使用swiper③插件。如果技术难度小于那个,我就不去github地址了。随便贴几段吧。①nodejs,mysql页面查询/***@description页面查询*@param{number}pageNo每页多少条*@param{number}pageSize多少页*/functionfuncSelectImgs(pageNo,pageSize){letpromise1=newPromise((resolve)=>{letSQLSelect=`select*fromgirl_img_tbllimit${(pageNo-1)*(pageSize)},${pageSize};`connection.query(`${SQLSelect}`,函数(错误,results,fields){if(error)抛出错误;让arr1=[]results.map((item,index,arr)=>{arr1.push(item.girl_img_url)})resolve(arr1)})});letpromise2=newPromise((resolve)=>{letSQLSelect=`selectcount(*)fromgirl_img_tbl;`connection.query(`${SQLSelect}`,function(error,results,fields){if(error)throwerror;resolve(results);});})returnPromise.all([promise1,promise2]);}②为了防止盗链,使用nodejs转发图片请求,使用请求库varoptions={url:str,标头:{'Referer':'targetUrl'}};请求(选项).on('错误',function(err){console.log(err)}).pipe(res);③在react中使用swiperif(this.swiper){this.swiper.slideTo(0,0)this.swiper.destroy();this.swiper=null;}this.swiper=newSwiper(this.refs.lun,{direction:'vertical',lazy:{loadPrevNext:true,loadPrevNextAmount:2},});}...//渲染方法在{arrImgUrls.map((urlItem,index,arr)=>{返回({this.handleImgClick(urlItem)}}>

)})}
我刚才提到的是为了防止反偷懒,我用我的nodejs服务器转发图片请求我的是1M的腾讯云服务器,转发图片的速度太慢了。昨天升级到10M,两天就36元,太贵了。贴个链接,http://115.159.47.17:8081/我没买域名,直接用ip地址。估计明天就限速了,所以升级两天,8月8日和8月9日。但是现在可以打开,但是会很慢。这取决于每个人的需求。如果喜欢,请私信我。我会继续升级带宽或更换服务器制造商。