1. 处理数据

  1. 上一步获取结果中含有p标签,用正则筛选,去掉标签,只留下文本。
var myHtml = document.querySelector('.read-content').innerHTML.replace(/<[^>]+>/g,'')
  1. 统计词的个数首先需要文本分词

  2. 分词模块segment(盘古分词组件),实例化,使用默认的识别模块及字典,载入字典文件需要1秒,仅初始化时执行一次即可

    let seg = new Segment();
    seg.useDefault();
  3. 开始分词。

    var arr = seg.doSegment(myHtml);
  4. 结果其中w表示内容,p表示词性,词性收录

    [ { w: '这是', p: 0 },
      { w: '一个', p: 2097152 },
      { w: '基于', p: 262144 },
      { w: 'Node.js', p: 8 },
      { w: '的', p: 8192 },
      { w: '中文', p: 1048576 },
      { w: '分词', p: 4096 },
      { w: '模块', p: 1048576 },
      { w: '。', p: 2048 } ]
  5. 去掉词性为2048的标点

    var myarr = [];
    
    arr.forEach(data=>{
        if(data.p !=2048){
            myarr.push(data.w)
        }
    });
  6. JSON格式统计词内容

    var myJson = {};
    myarr.forEach(data=>{
        if(!myJson[data]){
            myJson[data] = 1;
        }
        else{
            myJson[data]++;
        }
    });
  7. 去掉其中只出现一次的

    let arr2 = [];
    for(let word in myJson){
        if(myJson[word]<=1){
            continue;
        }
        arr2.push({
            w:word,
            c:myJson[word]
        })
    };
  8. 结果排序

    arr2.sort((json1,json2)=>json2.c-json1.c);
###### 完整代码

    var index = 0;
    const fs = require('fs');
    const url = require('url');
    const gbk = require('gbk');
    const JSDOM = require('jsdom').JSDOM;
    const Segment = require('segment');
    let seg = new Segment();
    seg.useDefault();

    GetUrl('https://www.xs8.cn/chapter/7373911103301701/19794192502339694',(data)=>{
        let DOM = new JSDOM(data);
        let document = DOM.window.document;

        var myHtml = document.querySelector('.read-content').innerHTML.replace(/<[^>]+>/g,'')
        var arr = seg.doSegment(myHtml);
        //去掉没用的
        var myarr = [];
        arr.forEach(data=>{
            if(data.p !=2048){
                myarr.push(data.w)
            }
        });
        //计算个数,存为json格式
        var myJson = {};
        myarr.forEach(data=>{
            if(!myJson[data]){
                myJson[data] = 1;
            }
            else{
                myJson[data]++;
            }
        });
        //去掉只出现1次的 
        let arr2 = [];
        for(let word in myJson){
            if(myJson[word]<=1){
                continue;
            }
            arr2.push({
                w:word,
                c:myJson[word]
            })
        };
        arr2.sort((json1,json2)=>json2.c-json1.c);
        console.log(arr2);
    })
    function GetUrl(sUrl,success){
        index++;
        var urlObj = url.parse(sUrl);
        var http ='';
        if(urlObj.protocol == 'http:'){
            http = require('http');
        }
        else{
            http = require('https');
        }

        let req = http.request({
            'hostname':urlObj.hostname,
            'path':urlObj.path
        },res=>{
            if(res.statusCode == 200){
                var str = '';
                res.on('data',buffer=>{
                    str +=buffer;
                });
                res.on('end',()=>{    
                    success && success(str);
                })
            }
            else if(res.statusCode == 302 || res.statusCode == 301){
                console.log(`第${index}次重定向`,res.headers.location);
                GetUrl(res.headers.location,success)
            }
        });
        req.end();
        req.on('error',()=>{
            console.log('404了,哥们');
        })
    }