使用Node拉取拉勾网杭州web前端数据,本地保存为json文件

目标url

https://www.lagou.com/jobs/positionAjax.json

目标数据

image.png

代码展示(index.js)

const fs=require('fs');
const https=require('https');
const querystring=require('querystring');

let isLast=false;
const getLagou=function(pageNo,isFirst){
    const params={
        needAddtionalResult:false,
        first: isFirst,
        pn: pageNo,
        city:'杭州',
        kd: 'web前端'
    }
    const url=`https://www.lagou.com/jobs/positionAjax.json?`+querystring.stringify(params)
    const req = https.get(url, (res) => {
        res.setEncoding('utf8');  
        let Data=''
        res.on('data', (d) => {
            Data += d;
        }).on('end',()=>{
            // console.log(123)
            // 数据拼接
            let content=Data&&JSON.parse(Data).content
            if(content){
                let data=content.positionResult.result
                isLast=content.positionResult.resultSize===0;
                data=data.map(item=>{
                    return {
                        companyShortName:item.companyShortName,
                        companySize:item.companySize,
                        city:item.city,
                        salary:item.salary,
                        workYear:item.workYear,
                        education:item.education
                    }
                })
                if(!isFirst){
                    const source=fs.readFileSync(`./lagou.json`)
                    let src=JSON.parse(source).data
         
                    data.push(...src)
                }
                const len=data.length;
                let res={data,size:len}
                fs.writeFile(`./lagou.json`,JSON.stringify(res),  res=> {
                    console.log('lagou.json生成成功')
                });
            }

        })
    });
    req.on('error', (e) => {
        console.error(e);
    })
    req.end();
}
let count=1;
// 每隔3秒请求一次,知道没有数据为止
const getAllMsg=function(){
    getLagou(count,count===1);
    count++;
    
    if(isLast) return ;
    setTimeout(()=>{
        console.log(count)
        getAllMsg();
    },3000)
}

getAllMsg();

 

使用

终端:node index.js

posted @ 2020-04-24 15:34  mingL  阅读(243)  评论(0编辑  收藏  举报