位置: 编程技术 - 正文
推荐整理分享利用Node.js制作爬取大众点评的爬虫(nodejs制作网站),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:node.js怎么样,node. js教程,nodejs制作网站,用nodejs做的项目,node.js怎么用,node.js怎么用,node.js怎么用,nodejs制作网站,内容如对您有帮助,希望把文章链接给更多的朋友!
前言
Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C、Java不一样);for循环体({})内引用i的值实际上是循环结束之后的值,因而引起各种undefined的问题;嵌套函数时,内层函数的变量并不能及时传导到外层(因为是异步)等等。
一、 API分析
大众点评开放了查询餐馆信息的API,这里给出了城市与cityid之间的对应关系,
链接: 1、start为步进数,表示分步获取信息的index,与nextStartIndex字段相对应;
2、cityid表示城市id,比如,合肥对应于;
3、regionid表示区域id,每一个id代表含义在start=0时rangeNavs字段中有解释;
4、categoryid表示搜索商家的分类id,比如,美食对应的id为,具体每一个id的含义参见在start=0时categoryNavs字段;
5、sortid表示商家结果的排序方式,比如,0对应智能排序,2对应评价最好,具体每一个id的含义参见在start=0时sortNavs字段。
在GET返回的JSON串中list字段为商家列表,id表示商家的id,作为商家的唯一标识。在返回的JSON串中是没有商家的口味、环境、服务的评分信息以及经纬度的;
因而我们还需要爬取两个商家页面: 1、逐步爬取searchshop API的取商家基本信息列表;
2、通过爬取的所有商家的id,异步并发爬取评分信息、经纬度;
3、最后将三份数据通过id做聚合,输出成json文件。
二、爬虫实现
Node.js爬虫代码用到如下的第三方模块:
1、superagent,轻量级http请求库,模仿了浏览器登录;
2、cheerio,采用jQuery语法解析HTML元素,跟Python的PyQuery相类似;
3、async,牛逼闪闪的异步流程控制库,Node.js的必学库。
导入依赖库:
声明全局变量,用于存放配置项及中间结果:
判断一个id是否在前面出现过,若object没有该id,则为undefined(注意不是null):
采取回调函数的方式,实现顺序逐步地递归调用爬虫函数:
在调用爬虫函数时,采用async的mapLimit函数实现对并发的控制;采用async的until对并发的协同处理,保证三份数据结果的id一致性(不会因为并发完成时间不一致而丢数据):
其中,parseShop与parseMap分别为解析商家详情页、商家地图页:
将array的每一个商家信息,逐行写入到json文件中:
总结
标签: nodejs制作网站
本文链接地址:https://www.jiuchutong.com/biancheng/370802.html 转载请保留说明!友情链接: 武汉网站建设