学习【node.js】也有几天时间了,所以打算写着练练手;索然我作为一个后端的选手,写起来还有那么一丝熟悉的感觉。emmm~~  ‘货’不多讲 ,开搞........

首先是依赖选择:

代码块如下:

//引入依赖
//https请求
const https = require('https');
//简称node版的jquery
const cheerio = require('cheerio');
//解决防止出现乱码
const iconv = require('iconv-lite')
//http请求
const request = require("request");
//负责读写文件
const fs = require('fs');
//处理文件路径
const path = require('path');

爬取路径:

代码块:(PS:这里单独拿出来是因为这个站的素材比较推荐,可以上去瞅瞅~~)

const url = 'https://unsplash.com/';

  

初步实现:

网站的基本构成

这里主要是我们直接确认一下需要的【img】标签,以及外面的【figure】,然后直接就可以开工了....

核心代码:

//方法对象
const util = { getsrc: function (url) {
https.get(url, res => {
const chunks = [];
res.on('data', chunk => {
// chunks里面存储着网页的html内容
chunks.push(chunk);
});
res.on('end', e => { let ALL = [];
//编码格式
let html = iconv.decode(Buffer.concat(chunks), 'utf8');
let $ = cheerio.load(html, { decodeEntities: false }); //标签遍历
$("figure img").each(function (idex, elent) {
let $elent = $(elent);
let $srcset = $elent.attr("srcset");
if ($srcset != undefined) {
let src = ($srcset.split(',').pop()).split('?')[0];
ALL.push({
src: src
})
}
});
//遍历数组 每个后面加.jpg
ALL.forEach(item => {
util.downloadimg(item.src, path.basename(item.src) + ".jpg", function () {
console.log(path.basename(item.src) + ".jpg");
});
})
}); res.on('error', e => {
console.log('Error: ' + e.message);
});
});
}, //运行主函数
main: function () {
console.log("------start--------");
util.getsrc(url);
},
//下载图片函数
downloadimg: function (src, srcname, callback) { //http请求
request.head(src, function (err, res, body) {
if (err) {
console.log('err:' + err);
return false;
}
console.log('res: ' + res);
//保存数据,这里是防止未来得及记录数据又开始读取数据而导致数据丢失
request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback);
});
}
} //主函数
util.main();

然后就可以运行 node xxx.js 看运行结果。

Git源码地址:https://github.com/KelvinKey/node-reptile

END  Initial entry into the front end, the inadequacies, please bear with me.

  

最新文章

  1. C++ 系列:深拷贝与浅拷贝
  2. Linux由管道组成的值得学习的命令
  3. WinForm中为按钮添加键盘快捷键,超简单,亲测有效
  4. CNAME
  5. Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong na me: com/ray/net/UDP_Receive)
  6. STM32F103 与 STM32F407引脚兼容问题
  7. 小学生之浅谈Struts2与struts1的运行机制
  8. css6种隐藏元素的方法
  9. gzip解压压缩的字符串数据
  10. Access-简易进销存管理系统
  11. idea提交git报错Push rejected: Push to origin/master was rejected
  12. h5 调起ios数字键盘的坑,限制特殊字符输入方案
  13. instanceof isInstance isAssignableFrom 比较
  14. 最长回文子串问题-Manacher算法
  15. Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装
  16. TypeError: HashUpdate fail
  17. 【Python】Django删除数据迁移记录
  18. data lake 新式数据仓库
  19. Python matplotlib 柱状图
  20. BZOJ_2002_[Hnoi2010]Bounce 弹飞绵羊_LCT

热门文章

  1. 一个获取google chrome扩展crx文件信息的PHP操作类
  2. C++经典面试题库 附带参考答案
  3. PTA 计算平均值
  4. bzoj 3998: [TJOI2015]弦论【SA+二分||SAM】
  5. ubuntu 18 安装virtulenv以及virtualenvwrapper
  6. fiddler安装及抓取http和https请求
  7. oracle常用的一些查询命令
  8. 2019 年 Vue 学习路线图!
  9. Window下完全卸载删除Nodejs
  10. [NOIP2018校模拟赛]T2矩阵分组 Matrix