美文网首页
Node.js_cheerio爬虫

Node.js_cheerio爬虫

作者: learninginto | 来源:发表于2020-02-27 20:26 被阅读0次

    Node.js_cheerio爬虫

    cheerio.png

    Cheeiro的优点有很多:主要是实现了核心jQuery的子集,从jQuery库中消除了所有DOM不一致和浏览器残骸,从而揭示了其真正华丽的API。

    • cheerio使用的一个爬虫案例,需要注意几点:
    1. cheerio只能爬取服务端渲染的内容
    2. 爬取的网站没有HTTPS加密
    3. 因为中node中不能引用DOM,所以需要使用cheerio插件(cheerio官网)封装的方法,以jQuery语法进行DOM查找

    以凤凰网的导航栏为例:

    • 导航栏

      nav.png
    • 检查元素

    检查元素.png
    • 安装依赖
    1. npm init -y

    2. cnpm install cheerio -S

    • node代码
    const http = require("http");
    //可以让我们以jQuery语法来进行dom查找  并不是对dom操作
    const cheerio = require("cheerio");
    //需要用到文件读写模块
    const fs = require("fs");
    const path = require("path");
    const url = "http://tech.ifeng.com/";
    
    http.get(url, (res) => {
    
        var str = "";
        res.on("data", (data) => {
            str += data;
        })
    
        res.on("end", () => {
            // 将str封装到$符号中去
            var $ = cheerio.load(str);
            var nav = $(".nav-2sgjEBc8>li");
            var arr = [];
            for (var i = 0; i < nav.length; i++) {
                var obj = {};
                obj.id = i;
                obj.text = nav.eq(i).find("a").text();
                arr.push(obj)
            }
    
            fs.readFile(path.join(__dirname, "./data/index1.json"),(err,data)=>{
                var dataList = JSON.parse(data + "");
    
                if(!dataList.data){
                    dataList.data = [];
                }
                dataList.data = arr;
    
                fs.writeFile(path.join(__dirname,"./data/index1.json"),
                JSON.stringify(dataList),(err) =>{})
            })  
        })
    })
    
    • index1.json文件(默认有一对{})
    {
        "data": [
            {
                "id": 0,
                "text": "科技首页"
            },
            {
                "id": 1,
                "text": "数码"
            },
            {
                "id": 2,
                "text": "手机"
            },
            {
                "id": 3,
                "text": "5G"
            },
            {
                "id": 4,
                "text": "24H必读"
            },
            {
                "id": 5,
                "text": "风眼"
            },
            {
                "id": 6,
                "text": "凰家评测"
            },
            {
                "id": 7,
                "text": "深度阅读"
            },
            {
                "id": 8,
                "text": "科技视频"
            },
            {
                "id": 9,
                "text": "上市公司财报"
            },
            {
                "id": 10,
                "text": "区块链"
            },
            {
                "id": 11,
                "text": "车科技"
            }
        ]
    }
    

    相关文章

      网友评论

          本文标题:Node.js_cheerio爬虫

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