微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用nodejs下载风景壁纸

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

superagent

superagent-charset (手动指定编码,解决GBK中文乱码)

cheerio

express

async (并发控制)

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

以彼岸桌面()栏目下的风景壁纸()为例进行讲解。

1. 分析URL

不难发现:

首页: 栏目/index.htm

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

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

2. 分析壁纸缩略图,找到对应壁纸的大图

使用chrome的开发者工具,可以发现,缩略图列表在 class="list"的div里,a标签的href属性的值就是单张壁纸所在的页面。

部分代码:

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

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

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

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

打开这个页面,我们最终要下载的壁纸,放在一个table里面。如下图,

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

下载图片代码

rush:js;"> request .get(wallpaper_down_url) .end(function(err,img_res){ if(img_res.status == 200){ // 保存图片内容 fs.writeFile(dir + '/' + wallpaper_down_title + path.extname(path.basename(wallpaper_down_url)),img_res.body,'binary',function(err){ if(err) console.log(err); }); } });

打开浏览器,访问

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

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

完成~

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

附上完整的图片下载的代码:

'); }); callback(null,wallpaper); // 返回数据 }); },delay); }; // 并发为2,下载壁纸 async.mapLimit(pic_url,2,function(_pic_url,callback){ fetchPic(_pic_url,callback); },function (err,result){ console.log('success'); res.send(result[0]); // 取下标为0的元素 }); }); };

特别需要注意的两点:

1. “彼岸桌面”网页的编码是“GBK”的。而nodejs本身只支持“UTF-8”编码。这里我们引入“superagent-charset”模块,用于处理“GBK”的编码。

附上github里的一个例子

2. nodejs是异步的,同一时间发送大量的请求,有可能被服务器认为是恶意请求而拒绝。 因此这里引入“async”模块,用于并发的处理,使用的方法是:mapLimit。

mapLimit(arr,limit,iterator,callback)

这个方法有4个参数:

第1个参数是数组。

第2个参数是并发请求的数量

第3个参数是迭代器,通常是一个函数

第4个参数是并发执行后的回调。

这个方法的作用是将arr中的每个元素同时并发limit次拿给iterator去执行,执行结果传给最后的callback。

后话

至此,便完成了图片的下载。

完整的代码,已经放在

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程之家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐