node实现简单爬虫功能
程序员文章站
2022-06-30 20:44:45
...
前言
第一次写文章,有点小激动和忐忑,有这个想法是想在编程的路上走远点,为了能让自己学过的东西更深入、印象更深刻(当然相信如果以后写的好的话肯定还是有很大的成就感的),写文章的初衷是为了做笔记,如果能帮助到你,会很开心。
目标
爬取拉钩网首页banner左侧的菜单栏,一级和二级的菜单。
开始
1、安装node,我们可以用npm或者cnpm(淘宝镜像)安装
2、新建一个文件夹,运行npm init 一路回车(也可以自行配置)生成package.json文件
3、新建一个index.js文件,撸代码
备注
需要用到的模块:
1、 fs模块:用于对系统文件及目录进行读写操作,将爬去到的数据写入本地目录(node自带模块,可直接引入)
2、http/https:node中重要的模块,在这里用来发起请求爬取数据(node自带模块,可直接引入)
3、cheerio:cheerio是一个node的库,可以理解为一个Node.js版本的jquery,用来从网页中以 css selector取数据,使用方式和jquery基本相同(需npm手动安装)
4、因为逻辑并不大复杂,所以直接附上代码。
附上代码(index.js)
//如果要爬取的地址是http开头的,则导入http模块
var https = require('https');
var fs = require('fs');
//使用get方法
var cheerio = require('cheerio');
https.get('https://www.lagou.com/',function(res){
var html = '';
res.on('data',function(chunk){
html +=chunk;
});
res.on('end',function(){
console.log(findMenu(html));
});
res.on('error',function(){
console.log(error);
})
})
function findMenu(html){
var $ = cheerio.load(html);
//可以打开拉勾网比对,菜单第一层的类名为.meun_main
var Menu = $('.menu_main');
var arr = [];
Menu.each(function(i,item)
var oneMenu = $(item).find('h2').text().trim();
var twoMenu = $(item).find('a');
var obj = {};
obj.oneMenu = oneMenu;
obj.twoMenu = [];
twoMenu.each(function(i, item) {
var value = $(item).text();
obj.twoMenu.push(value);
});
arr.push(obj);
fs.writeFile('./tmp/job.json',JSON.stringify(arr),function (err) {
if(err){
throw err;
}
})
})
return arr;
}
运行node index.js 即可得到想要的数据,并写入到了当前的tmp文件夹中。
如有问题请及时反馈,欢迎一起交流~