• 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('请求错误')
    })

      

  • 相关阅读:
    LeetCode Combination Sum III
    LeetCode Contains Duplicate
    CSRF & CORS
    LeetCode Kth Largest Element in an Array
    Maven 使用 Nexus 内部库 代理
    可重定位目标文件
    过程(栈帧结构是干货)
    控制语句(if-else+循环+switch)汇编规则
    程序编码(机器级代码+汇编代码+C代码+反汇编)
    转移指令jmp和跳转指令call
  • 原文地址:https://www.cnblogs.com/catherLee/p/13093111.html
Copyright © 2020-2023  润新知