node简易爬虫

1. http模块,网络请求

cheerio库, 将html格式的字符串转成类dom结构,之后可以分析结构,通过jq的语法选中其中的元素。

 

/*
1. 请求网站数据
2. 将数据保存本地文件
*/
let picArr = []
const http=require('https')
const fs=require('fs')
const cheerio=require('cheerio')
//let url='https://www.qunar.com/'
let url='https://oasgames.com/pc/zh/home.html'
//let url ='http://www.ziroom.com/'
let json='http://nodejs.org/dist/index.json'

http.get(url,(res)=>{
    // 安全判断
    const { statusCode } = res;  //状态码
    const contentType = res.headers['content-type']; //文件类型

    //console.log(statusCode,contentType)

    let err =null;
    if(statusCode!==200){
        err=new Error('请求状态错误')
    }else if(!/^text\/html/.test(contentType)){
        //格式类型是网页
        err=new Error('请求类型错误')
    }


    if(err){
        console.log(err)
        res.resume(); // 重置缓存
        return false
    }


    //数据处理
    let rawData=''
    res.on('data',(chunk)=>{
        console.log('----')
        rawData+=chunk.toString('utf8')
        // console.log(chunk.toString('utf8'))
    })

    // 数据流传输完毕
    res.on('end',()=>{
         fs.writeFileSync('./bibi.html',rawData)
        //通过cheerio 分析
        let $=cheerio.load(rawData)// 将请求的网页数据进行转化

        $('video').each((index,el)=>{
            picArr.push({
                'type':'video',
                "src": $(el).attr('src')
            })
        })
        $('img').each((index,el)=>{
            picArr.push({
                'type':'img',
                "src": $(el).attr('src')
            })
        })
        console.log('picArr',picArr)
        fs.writeFileSync('./pic.js',picArr)

    })

}).on('error',(err)=>{
    console.log('请求错误')
})

 

  

posted @ 2020-06-11 14:59  CatherLee  阅读(189)  评论(0编辑  收藏  举报