Node.js实现简单的爬取的示例代码

2020-06-17 05:37:30易采站长站整理

学习【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) {