美文网首页Vue
Nodejs使用cheerio爬取网站数据

Nodejs使用cheerio爬取网站数据

作者: beatzcs | 来源:发表于2019-04-08 17:35 被阅读0次
Cheerio:
Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构,
然后提供像jquery一样的css选择器查询

本文实现一个抓取类别列表的功能.

一丶圈点勾画:

1.查找a标签的href:

var pic_href = pic.find('a').attr('href');

2.查找a标签的子标签img并获取_src

var pic_src = pic.find('a').children('img').attr('_src');

3.查找a标签的子标签img并获取alt

var pic_message = pic.find('a').children('img').attr('alt');

4.查找a, h1标签的文本

var atitle = dd.find('a').text().trim();
var htitle = dd.find('h1').text().trim();

5.查找标签有多个

diypage.find('dd').each(function () {
    var dd = $(this);
    var list = [];
    var title = dd.find('h1').text().trim();
    dd.find('a').each(function () {
        list.push($(this).text().trim());
    });
    htmlListData.push({
        title: title,
        kindList: list
    });
});

二丶出现的问题

页面使用的gbk编码, 获取到的a标签, h1标签的文本内容出现乱码.
解决办法: 引入iconv-lite库.

var chunk = iconv.decode(Buffer.concat(datas), 'gbk');

三丶类别列表的效果图:

demo.png

四丶全部代码如下:

// 加载http模块
var http = require('http');
// Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构
// 然后提供像jquery一样的css选择器查询
var cheerio = require('cheerio');
var iconv = require('iconv-lite');

// 定义网络爬虫的目标地址(自行更改)
var url = 'http://www.xxx.com/xxx?yyy=zzz';

http.get(url, function (res) {
    var datas = [];
    // 获取页面数据
    res.on('data', function (data) {
        datas.push(data);
    });
    // 数据获取结束
    res.on('end', function () {
        var chunk = iconv.decode(Buffer.concat(datas), 'gbk');
        var htmlListData = filterHtmlList(chunk);
        printInfo(htmlListData);
    });
}).on('error', function () {
    console.log('获取数据出错!');
});

/* 过滤页面信息 */
function filterHtmlList(html) {
    if (html) {
        // 沿用JQuery风格,定义$
        var $ = cheerio.load(html);
        // 根据id列表信息
        var diypage = $('#diypage');
        var htmlListData = [];

        /* 列表信息遍历 */
        diypage.find('dd').each(function () {
            var dd = $(this);
            var list = [];
            var title = dd.find('h1').text().trim();
            dd.find('a').each(function () {
                list.push($(this).text().trim());
            });
            htmlListData.push({
                title: title,
                kindList: list
            });
        });
        return htmlListData;
    } else {
        console.log('无数据传入!');
    }
}

/* 打印信息 */
function printInfo(htmlListData) {
    // 计数
    var count = 0;
    // 遍历信息列表
    htmlListData.forEach(function (item) {
        // 获取图片
        var title = item.title;
        // 获取图片对应的链接地址
        var kindList = item.kindList;
        // 打印信息
        console.log('第' + (++count) + '个类别:' + title);
        console.log('\n');
        kindList.forEach(function (sitem) {
            console.log(sitem + " ");
        })
        console.log('\n');
        console.log('------------------------------');
        console.log('\n');
    });
}

参考链接:
1. cheerio库中文文档
2. Node.js学习之网络爬虫

相关文章

网友评论

    本文标题:Nodejs使用cheerio爬取网站数据

    本文链接:https://www.haomeiwen.com/subject/jqspiqtx.html