NodeJs如何实现简单的爬虫功能

  介绍

这篇文章给大家分享的是有关NodeJs如何实现简单的爬虫功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1。爬虫:爬虫,是一种按照一定的规则,自动地抓取网页信息的程序或者脚本;利用NodeJs实现一个简单的爬虫案例,爬取老板直聘网站的网络前端相关的招聘信息,以广州地区为例,

2。脚本所用到的NodeJs模块

express ,,,用来搭建一个服务,将结果渲染到页面

,,,swig ,,,,,,,,模板引擎

,,,cheerio ,,,,用来抓取页面的数据

,,,requests ,,用来发送请求数据(具体可查:https://www.npmjs.com/package/requests)

,,,async ,,,,,,用来处理异步操作,解决请求嵌套的问题,脚本中只使用了async.whilst(测试、iteratee回调),具体可见:https://caolan.github.io/async/

3。实现流程:

,,首先先获取到所爬取页面的URL,打开老板直聘网站,搜索网前端既可以获取到https://www.zhipin.com/c101280100-p100901/?page=1& ka=页面

 NodeJs如何实现简单的爬虫功能

,,然后通过Chrome浏览器打开F12,获取到信息中多对应的dom节点,即可知道想要获取信息;

 NodeJs如何实现简单的爬虫功能

,,4 .代码实现

,,,,,目录结构:

 NodeJs如何实现简单的爬虫功能

,,,,,app.js

var  cheerio =,要求(& # 39;加油# 39;);   var  requests =,要求(& # 39;请求# 39;);   var  async =,要求(& # 39;异步# 39;);   var  express =,要求(& # 39;表达# 39;);   var  swig =,要求(& # 39;痛饮# 39;);   var  app =,表达();   swig.setDefaults({缓存:假});   app.set(& # 39;观点# 39;,& # 39;。/视图/& # 39;);   app.set (& # 39; view 引擎# 39;,& # 39;html # 39;);   app.engine (& # 39; html # 39;, swig.renderFile);   app.get(& # 39;/& # 39;函数(下)要求,res, {   ,var  page =, 1,,//当前页数   ,var  list =,[];,//保存记录   ,async.whilst (   函数才能(){   ,,return  page  & lt;, 11;   ,,},   函数(回调){才能   ,,请求(“https://www.zhipin.com/c101280100-p100901/?page=${页面},ka=页面')   ,,碧绿(& # 39;数据# 39;,函数(块){   ,,var  $,=, cheerio.load (chunk.toString ());   ,,美元(& # 39;.job-primary& # 39;) . each(函数(){   ,,,var  company =,(这);美元(& # 39;.info-company  .company-text  . name # 39;)。text ();   ,,,var  job_title =,(这);美元(& # 39;.info-primary  .name  .job-title& # 39;)。text ();   ,,,var  salary =,(这);美元(& # 39;.info-primary  .name  .red& # 39;)。text ();   ,,,var  description =,(这);美元(& # 39;.info-company  .company-text  p # 39;)。text ();   ,,,var  area =,(这);美元(& # 39;.info-primary  p # 39;)。text ();   ,,,var  item =, {   ,,,,公司:公司,   ,,,,job_title: job_title,   ,,,,工资:工资,   ,,,,描述:描述,   ,,,,面积:区域   ,,,};   ,,,list.push(项);   ,,});   页面,,+ +;   ,,回调();   ,,})。(& # 39;结束# 39;函数(err) {   ,,,,如果(err) {   ,,,,,console.log(错);   ,,,,}   ,,,,如果(==10页){   ,,,,res.render(& # 39;指数# 39;,{   ,,,,,列表:列表   ,,,,});   ,,,}   ,,});   ,,},   函数才能(err) {   ,,console.log(错);   ,,}   ,);   });//监听   app.listen (8080),

视图/索引。html页面

& lt; ! DOCTYPE  html>   & lt; html  lang=癳n"祝辞   & lt; head>   ,& lt; meta  charset=癠TF-8"比;   ,& lt; title> Document   & lt;/head>   & lt; style>   {,表   宽度:1300 px;才能   边境才能:1 px  solid  # ccc;   ,,border-collapse:崩溃;   ,,text-align:中心;   保证金才能:0,汽车;   ,}   ,td、tr、th {   边境才能:1 px  solid  # ccc;   ,,border-collapse:崩溃;   ,}   ,tr {   高度:才能30 px;   ,,行高:30 px;   ,}   & lt;/style>   & lt; body>   ,& lt; table>   & lt;才能thead>   ,,& lt; tr>   ,,,& lt; th>公司名称& lt;/th>   ,,,& lt; th>公司地址& lt;/th>   ,,,& lt; th>薪资& lt;/th>   ,,,& lt; th>公司描述& lt;/th>   ,,,& lt; th>岗位名称& lt;/th>   ,,& lt;/tr>   & lt;才能/thead>   null   null   null   null   null   null   null   null   null   null   null   null   null   null

NodeJs如何实现简单的爬虫功能