使用nodejs下载风景壁纸

  

<强>需要用到的第三方模块有:

  

  

  

  

  

  

完整的代码,可以在我的github中可以下载。主要的逻辑逻辑在netbian。js中。

  

以彼岸桌面(http://www.netbian.com/)栏目下的风景壁纸(http://www.netbian.com/fengjing/index.htm)为例进行讲解。

  

<强> 1。分析URL

  

<强> 使用nodejs下载风景壁纸

  

不难发现:

  

首页:栏目你

  

分页:栏目/index_具体页码. htm

  

知道这个规律,就可以批量下载壁纸了。

  

<强> 2。分析壁纸缩略图,找到对应壁纸的大图

  

使用chrome的开发者工具,可以发现,缩略图列表在类=傲斜怼钡膁iv里,一个标签的href属性的值就是单张壁纸所在的页面。

  

使用nodejs下载风景壁纸

  

        请求   . get (url)   指标(最终函数(呃,sr) {   var=美元cheerio.load (sres.text);   var pic_url=[];//中等图片链接数组   $('。ul列表",0);(‘李’)。每个(函数(指数、避署){   var避署=$(避署);   var href=https://www.yisu.com/zixun/ele.find (a) .eq (0) .attr (“href”);//中等图片链接   如果(href !=未定义){   pic_url.push (url_model。解决(域,href));   }   });   });      

<强> 3。以“http://www.netbian.com/desk/17662.htm”继续分析

  

打开这个页面,发现此页面显示的壁纸,依旧不是最高的分辨率。

  

点击”下载壁纸”按钮里的链接,打开新的页面。

  

使用nodejs下载风景壁纸

  

<强> 4。以“http://www.netbian.com/desk/17662”- 1920 x1080.htm继续分析

  

打开这个页面,我们最终要下载的壁纸,放在一个表格里面。如下图,http://img.netbian.com/file/2017/0203/bb109369a1f2eb2e30e04a435f2be466.jpg

  

才是我们最终要下载的图片的URL(幕后老板终于现身了(@ ̄ー ̄@))。

  

使用nodejs下载风景壁纸

  

        请求   . get (wallpaper_down_url)   指标(最终函数(呃,img_res) {   如果(img_res。状态==200){//保存图片内容   fs。writeFile (dir +‘/? wallpaper_down_title + path.extname (path.basename (wallpaper_down_url)), img_res。身体、“二进制”功能(err) {   如果(err) console.log(错);   });   }   });      

打开浏览器,访问,http://localhost: 1314/风景”

  

选择栏目和页面,点击“开始”按钮:

  

使用nodejs下载风景壁纸

  

并发请求服务器,下载图片。

  

使用nodejs下载风景壁纸

  

完成~   

使用nodejs下载风景壁纸

  

图片的存放目录按照栏目+页码的形式保存。

  

使用nodejs下载风景壁纸

  

     /* *   *下载图片   * @param{[型]}url(图片url]   * @param{[型]}dir(存储目录)   * @param{[型]}res(描述)   * @return{[型]}[描述]   */var down_pic=function (url、dir res) {   var域=' http://www.netbian.com ';//域名   请求   . get (url)   指标(最终函数(呃,sr) {   var=美元cheerio.load (sres.text);   var pic_url=[];//中等图片链接数组   $('。ul列表",0);(‘李’)。每个(函数(指数、避署){   var避署=$(避署);   var href=https://www.yisu.com/zixun/ele.find (a) .eq (0) .attr (“href”);//中等图片链接   如果(href !=未定义){   pic_url.push (url_model。解决(域,href));   }   });   var计算=0;//并发计数器   var壁纸=[];//壁纸数组   var fetchPic=function (_pic_url,回调){   数+ +;//并发加1   var延迟=方法((math . random () * 10000000) % 2000);   控制台。日志('现在的并发数是:' +数+”,正在抓取的图片的网址是:' + _pic_url +的时间是:' +延迟+“毫秒”);   setTimeout(函数(){//获取大图链接   请求   . get (_pic_url)   指标(最终函数(呃,阿瑞斯){   var $ $=cheerio.load (ares.text);   var pic_down=url_model。解决(域,$ $ (' .pic-down '); (a) .attr (“href”));//大图链接   数,//并发减1//请求大图链接   请求   . get (pic_down)   .charset (gbk)//设置编码,网页以gbk的方式获取   指标(最终函数(呃,pic_res) {   var $ $ $=cheerio.load (pic_res.text);   var wallpaper_down_url=$ $ $ (' # endimg '); (img) .attr (“src”);//URL   var wallpaper_down_title=$ $ $ (' # endimg '); (img) .attr (“alt”);//标题//下载大图   请求   . get (wallpaper_down_url)   指标(最终函数(呃,img_res) {   如果(img_res。状态==200){//保存图片内容   fs。writeFile (dir +‘/? wallpaper_down_title + path.extname (path.basename (wallpaper_down_url)), img_res。身体、“二进制”功能(err) {   如果(err) console.log(错);   });   }   });   墙纸。推动(wallpaper_down_title +”下载完毕& lt; br/祝辞的);   });   回调(零、壁纸);//返回数据   });   },延迟);   };//并发为2,下载壁纸   异步。mapLimit (pic_url 2函数(回调_pic_url) {   fetchPic (_pic_url,回调);   (呃,结果){},函数   console.log('成功');   res.send(结果[0]);//取下标为0的元素   });   });   

使用nodejs下载风景壁纸