本文將介紹node使用cheerio插件,使jquery可以在服務端解析結構,實現精准查詢並爬取數據
一、導入相關依賴
需要安裝cheerio插件,使用npm i cheerio -S
指令安裝
const cheerio = require('cheerio');
//根據請求網址的協議來決定引入http還是https模塊
const http = require('http');
const fs = require('fs');
二、使用get請求或post請求網址
var url = '你想要爬取的網址';
http.get(url, (res) => {
let rawData = '';**
//監聽數據
res.on('data', (chunk) => {
rawData += chunk;
});**
//結束標識
**res.on('end', () => {
try {
//調用cheerio封裝的函數
getData(rawData);
** } catch (e) {**
**console.error(e.message)**;
}
});
}).on('error', (e) => {
console.error(`出現錯誤: ${e.message}`);
});
三、封裝cheerio解析插件
function getData(data) {**
const $ = cheerio.load(data);
var aBox = $('.jiangshi li');
var arr = [];**
aBox.each((index, item) => {
var img = $(item).find('img').attr('src');
**var name = $(item).find('h6').text();
var txt = $(item).find('.jieshao').text().trim();
arr.push({
img,
name,
txt
})
})
console.log(arr);
}
四、附上完整代碼
const cheerio = require('cheerio');
const http = require('http');
const fs = require('fs');
var url = '你想要爬取的位置';**
http.get(url, (res) => {
let rawData = '';
res.on('data', (chunk) => {**
rawData += chunk;
});
res.on('end', () => {**
try {
getData(rawData);
** } catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {**
console.error(`出現錯誤: ${e.message}`);**
});
function getData(data) {
//將獲取到的html結構賦值給$
const $ = cheerio.load(data);**
**var aBox = $('.jiangshi li');**
var arr = [];
aBox.each((index, item) => {**
var img = $(item).find('img').attr('src');
**var name = $(item).find('h6').text();
**var txt = $(item).find('.jieshao').text().trim();
arr.push({**
img,
name,
txt
})
})
console.log(arr);
}