有些网站的部分模块并不是采用前后端分离模式开发的,而是后端直接将模板渲染在网页上的,这时候我们就可以使用爬虫技术爬取到这些信息。
首先使用 npm init初始化项目生成package.json文件和node_modules文件夹,再使用npm i cheerio --save安装cheerio模块
创建入口文件spider.js并引入cheerio模块,在spider.js中创建一个服务器并获取到网站的HTML信息,然后创建spider函数爬取这个网站的指定信息并返回给我们的服务器。
这里演示的是爬取BOSS直聘的信息
源代码:
const http = require('http');
const https = require('https');
const url = require('url');
const cheerio = require('cheerio');
// 创建返回json字符串格式的服务器
http.createServer((req, res) => {
const curUrl = url.parse(req.url, true);
// console.log(curUrl.query.callback);
res.writeHead(200, {
'Content-Type': 'application/json;charset=utf-8',
'access-control-allow-origin': '*'
})
switch(curUrl.pathname) {
case '/api/kunkun':
// 调用函数,node作为客户端,去向BOSS拿数据,数据拿完,执行回调函数,
httpsGet((data) => {
res.end(spider(data));
})
break;
default:
res.end('404 Not Found')
}
}).listen(3000)
// 转发BOSS数据
const httpsGet = (callback) => {
let allData = '';
https.get(`https://www.zhipin.com/chengdu/?sid=sem_pz_bdpc_dasou_title`, (res) => {
// 以数据流的方式接收数据
res.on('data', (chunk) => {
// 一点点地接收
allData += chunk;
})
// 数据接收完毕
res.on('end', () => {
// console.log(allData);
// 接收完毕,执行回调函数
callback(allData)
})
})
}
// 简易爬虫函数,爬取BOSS直聘信息
const spider = (data) => {
const $ = cheerio.load(data);
const $dataList = $('.company-job-item');
const boss = new Array();
$dataList.each((index, val) => {
boss.push({
job: $(val).find('.name').text(),
salary: $(val).find('.salary').text(),
location: $(val).find('.job-text').text()
// required: $(val).find('.labels').text()
})
})
console.log(boss);
return JSON.stringify(boss);
}
效果:
需要注意的是:要根据不同网站的协议来使用对应的模块,例如http和https