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);
}                

原文地址:https://www.cnblogs.com/piaoyi1997/p/13298636.html