Node.js實(shí)現(xiàn)簡(jiǎn)單的爬取的示例代碼
學(xué)習(xí)【node.js】也有幾天時(shí)間了,所以打算寫著練練手;索然我作為一個(gè)后端的選手,寫起來(lái)還有那么一絲熟悉的感覺(jué)。emmm~~ ‘貨'不多講 ,開(kāi)搞........
首先是依賴選擇:

代碼塊如下:
//引入依賴
//https請(qǐng)求
const https = require('https');
//簡(jiǎn)稱node版的jquery
const cheerio = require('cheerio');
//解決防止出現(xiàn)亂碼
const iconv = require('iconv-lite')
//http請(qǐng)求
const request = require("request");
//負(fù)責(zé)讀寫文件
const fs = require('fs');
//處理文件路徑
const path = require('path');
爬取路徑:

代碼塊:(PS:這里單獨(dú)拿出來(lái)是因?yàn)檫@個(gè)站的素材比較推薦,可以上去瞅瞅~~)
const url = 'https://unsplash.com/';
初步實(shí)現(xiàn):
網(wǎng)站的基本構(gòu)成

這里主要是我們直接確認(rèn)一下需要的【img】標(biāo)簽,以及外面的【figure】,然后直接就可以開(kāi)工了....
核心代碼:
//方法對(duì)象
const util = {
getsrc: function (url) {
https.get(url, res => {
const chunks = [];
res.on('data', chunk => {
// chunks里面存儲(chǔ)著網(wǎng)頁(yè)的html內(nèi)容
chunks.push(chunk);
});
res.on('end', e => {
let ALL = [];
//編碼格式
let html = iconv.decode(Buffer.concat(chunks), 'utf8');
let $ = cheerio.load(html, { decodeEntities: false });
//標(biāo)簽遍歷
$("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
})
}
});
//遍歷數(shù)組 每個(gè)后面加.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);
});
});
},
//運(yùn)行主函數(shù)
main: function () {
console.log("------start--------");
util.getsrc(url);
},
//下載圖片函數(shù)
downloadimg: function (src, srcname, callback) {
//http請(qǐng)求
request.head(src, function (err, res, body) {
if (err) {
console.log('err:' + err);
return false;
}
console.log('res: ' + res);
//保存數(shù)據(jù),這里是防止未來(lái)得及記錄數(shù)據(jù)又開(kāi)始讀取數(shù)據(jù)而導(dǎo)致數(shù)據(jù)丟失
request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback);
});
}
}
//主函數(shù)
util.main();
然后就可以運(yùn)行 node xxx.js 看運(yùn)行結(jié)果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何使用Node.js爬取任意網(wǎng)頁(yè)資源并輸出PDF文件到本地
- node.js爬取中關(guān)村的在線電瓶車信息
- 手把手教你用Node.js爬蟲(chóng)爬取網(wǎng)站數(shù)據(jù)的方法
- Node.js爬取豆瓣數(shù)據(jù)實(shí)例分析
- 利用node.js爬取指定排名網(wǎng)站的JS引用庫(kù)詳解
- 利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲(chóng)
- node.js爬蟲(chóng)爬取拉勾網(wǎng)職位信息
- 利用Node.js制作爬取大眾點(diǎn)評(píng)的爬蟲(chóng)
- Node.js環(huán)境下編寫爬蟲(chóng)爬取維基百科內(nèi)容的實(shí)例分享
相關(guān)文章
nodejs實(shí)現(xiàn)黑名單中間件設(shè)計(jì)
最近寫的項(xiàng)目中涉及到防止灌水的功能,于是設(shè)計(jì)了黑名單中間件,跟大家分享一下,同時(shí)也希望大家有好的建議能夠拍磚.2014-06-06
淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
詳解本地Node.js服務(wù)器作為api服務(wù)器的解決辦法
本篇文章主要介紹了詳解本地Node.js服務(wù)器作為api服務(wù)器的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
npm dose not support Node.js v10.15
這篇文章主要給大家介紹了關(guān)npm dose not support Node.js v10.15.3的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
Node.js抓取中文網(wǎng)頁(yè)亂碼問(wèn)題和解決方法
這篇文章主要介紹了Node.js抓取中文網(wǎng)頁(yè)亂碼問(wèn)題和解決方法,本文講解了使用一些開(kāi)源庫(kù)解決抓取中出現(xiàn)的亂碼問(wèn)題,需要的朋友可以參考下2015-02-02
Node.js中使用mongoskin操作mongoDB實(shí)例
這篇文章主要介紹了Node.js中使用mongoskin操作mongoDB實(shí)例,Mongous是一個(gè)輕量級(jí)的nodejs mongodb驅(qū)動(dòng),需要的朋友可以參考下2014-09-09

