<强>需要用到的第三方模块有:强>
完整的代码,可以在我的github中可以下载。主要的逻辑逻辑在netbian。js中。
以彼岸桌面(http://www.netbian.com/)栏目下的风景壁纸(http://www.netbian.com/fengjing/index.htm)为例进行讲解。
<强> 1。分析URL 强>
<强> 强>
不难发现:
首页:栏目你
分页:栏目/index_具体页码. htm
知道这个规律,就可以批量下载壁纸了。
<强> 2。分析壁纸缩略图,找到对应壁纸的大图强>
使用chrome的开发者工具,可以发现,缩略图列表在类=傲斜怼钡膁iv里,一个标签的href属性的值就是单张壁纸所在的页面。
请求 . 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”继续分析强>
打开这个页面,发现此页面显示的壁纸,依旧不是最高的分辨率。
点击”下载壁纸”按钮里的链接,打开新的页面。
<强> 4。以“http://www.netbian.com/desk/17662”- 1920 x1080.htm继续分析强>
打开这个页面,我们最终要下载的壁纸,放在一个表格里面。如下图,http://img.netbian.com/file/2017/0203/bb109369a1f2eb2e30e04a435f2be466.jpg
才是我们最终要下载的图片的URL(幕后老板终于现身了(@ ̄ー ̄@))。
请求 . 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/风景”
选择栏目和页面,点击“开始”按钮:
并发请求服务器,下载图片。
完成~
图片的存放目录按照栏目+页码的形式保存。
/* * *下载图片 * @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下载风景壁纸