Node.js_cheerio爬虫

2020-02-27  本文已影响0人  learninginto

Node.js_cheerio爬虫

cheerio.png

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

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

以凤凰网的导航栏为例:

检查元素.png
  1. npm init -y

  2. cnpm install cheerio -S

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) =>{})
        })  
    })
})
{
    "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": "车科技"
        }
    ]
}
上一篇下一篇

猜你喜欢

热点阅读