利用node.js爬虫

109 阅读1分钟

添加依赖:

      npm i gbk 

      npm i jsdom

const url = require('url');

const gbk = require('gbk');

const JSDOM = require('jsdom').JSDOM;

getUrl('http://zhangfan.online',res=>{

    var html = gbk.toString('utf-8',res);

    // console.log(`打印:${html}`);

    //utf8 直接使用res  gbk 使用html 

    let DOM = new JSDOM(res);

    let document = DOM.window.document;

    console.log(document.querySelector('.info p').innerHTML);

    fs.writeFile('download.html',res,()=>{

        // console.log(`保存成功${res}`);

    })

});

\


function getUrl(sUrl,backBlock){

    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){

            console.log('end');

            var arr = [];

            res.on('data',buff=>{

                 arr.push(buff);   

            });

            res.on('end',()=>{

                let b = Buffer.concat(arr);

                backBlock && backBlock(b);

            });

        }else if(res.statusCode == 302 ||res.statusCode == 301){

            // 这里使用了递归

            getUrl(res.headers.location,backBlock);

        }

    })

    // req.on('error');

    req.end();

}

必须使用node项目爬取数据