1. 程式人生 > 實用技巧 >node-cheerio外掛實現爬蟲

node-cheerio外掛實現爬蟲

本文將介紹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);
}