使用Node拉取拉勾网杭州web前端数据,本地保存为json文件
目标url
https://www.lagou.com/jobs/positionAjax.json
目标数据
代码展示(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