最近想学习node.js,突然在网上看到了一个基于node的爬虫制作教程,于是就简单学习了一下,把这篇文章分享给了同样是Node.js新手的朋友.
目的:在http://tweixin.yueyishujia.com/webapp/build/html/网上搜索所有门店的发型师基本信息。
想法:访问以上网站,通过chrome浏览器的网络分析网页内容,找到界面获取各个店铺的美发师,分析参数并返回数据,遍历所有店铺的所有美发师,直到遍历完成,同事将信息保存在本地。
第一步:安装node.js
下载并安装节点。这个步骤很简单,不再详细说明。有问题可以直接问杜娘。
第二步:建立项目
1)打开dos命令栏,cd进入你要创建项目的路径(我把这个项目直接放在e驱动器上,下面作为例子);
2)mkdir节点(创建一个文件夹来存储项目,我在这里将其命名为node);
3)cd进入名为node的文件夹,执行npm init初始化项目(期间会填写一些信息,我直接输入);
步骤3:创建一个文件夹来存储已爬网数据
1)创建一个数据文件夹来存储发型师的基本信息;
2)创建一个图像文件夹来存储美发师的头像;
目前,该项目的文件如下:
步骤4:安装第三方依赖包(fs是内置模块,不需要单独安装)
1)npm安装cherio保存
2)npm安装super agent保存
3)npm安装异步保存
4)npm安装请求保存
简要解释上面安装的依赖包:
Cheerio:它是nodejs的一个页面抓取模块,是服务器专门定制的一个快速、灵活、可实现的jQuery核心实现,可以用几乎和jQuery一样的方式解析请求结果;
Superagent:可以主动发起get/post/delete请求;
Async:async模块的诞生是为了解决嵌套金字塔和异步进程控制。因为nodejs是一个异步编程模型,所以在同步编程中有一些事情可以很容易的完成,但是现在很麻烦。Async的过程控制就是简化这些操作;
Request:有了这个模块,http request变得超级简单,request好用,同时支持https和重定向;
第五步:编写爬虫代码
打开hz.js并编写代码:
var超级代理=require(‘超级代理’);var cherio=require(' cherio ');var async=require(' async ');var fs=require(' fs ');var request=require(' request ');var page=1;//获取发型师处有分页功能,所以用该变量控制分页var num=0;//爬取到的信息总条数var storeid=1;//门店' IDconsole.log('爬虫程序开始运行.');函数fetchPage(x) { //封装函数startRequest(x);}函数startRequest(x) { superagent .发帖(' http://微信。悦亦舒家。com/v2/store/designerJSON ').发送({ //请求的表单信息表单数据页: x,storeid : storeid }) //Http请求的页眉信息设置(' Accept ',' application/json,text/javascript,*/*;q=0.01 ').集合('内容-类型','应用程序/x-www-表单-URL编码;字符集=UTF-8 ' .end(函数(err,res){ //请求返回后的处理//将反应中返回的结果转换成JSON对象if(err){ console。日志(err);} else { var designJson=JSON。解析;var deslist=designjson。数据。设计师名单;if(deslist。长度0){ num=deslist。长度;//并发遍历脱泥工对象async.mapLimit(deslist,5,function (hair,callback) { //对每个对象的处理逻辑console.log('.正在抓取数据标识:"头发。标识"-发型师:英尺的头发。姓名);saveImg(发,回调);},函数(错误,结果){ console.log('.累计抓取的信息数' num);} );页面;fetchPage(第页);}else{ if(page==1){ console.log('.爬虫程序运行结束~~~~~~~');console.log('.本次共爬取数据数字条.');返回;} storeid=1;page=1;fetchPage(第页);} } });} fetchPage(第页);函数saveImg(头发,回调){ //存储图片var img _ filename=hair。商店。名字是“头发”。名字.png ';var img _ src=' http://照片。悦亦舒家。com :8112 '发。头像;//获取图片的url /采用请求模块,向服务器发起一次请求,获取图片资源request.head(img_src,function(err,res,body){ if(err){ console。日志(err);}else{ request(img_src).管道(fs.createWriteStream(')./image/' img _ filename));//通过流的方式,把图片写到本地/image目录下,并用发型师的姓名和所属门店作为图片的名称console.log('.存储id=' hair.id '相关图片成功!');} });//存储照片相关信息var html='姓名:“头发。名称“br职业:“头发。作业类型" br职业等级:“头发。职务”br简介:“头发。simpleinfo"br个性签名:“头发。信息" br剪发价格:"头发,钱"元英国铁路公司店名:“头发。商店。名称“br地址:“头发。商店。位置" br联系方式:"头发。电话“br头像:img src=' img _ src ' style=' width :200 px;高度' :200像素;fs.appendFile(' ./data/"头发。商店。名字"-"头发。姓名.html ',html,' utf-8 ',函数(错误){如果(错误){控制台。日志(err);} });回调(空,发);}步骤六:运行爬虫程序
输入节点hz.js命令运行爬虫程序,效果图如下:
运行成功后,发型师基本信息以超文本标记语言文件的形式存储在数据文件夹中,发型师头像图片存储在图像文件夹下:
后记:到此一款基于node.js制作的简单爬虫就大功告成了,由于我也是初学者,好多地方也不是很理解,但好在是自己完成了,不足之处敬请谅解。
代码下载地址:https://github。com/雷燕0323/nodeCrawler
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。