NodeJs实现简单的爬虫
2018-12-06 07:32:45来源:博客园 阅读 ()
1.爬虫:爬虫,是一种按照一定的规则,自动地抓取网页信息的程序或者脚本;利用NodeJS实现一个简单的爬虫案例,爬取Boss直聘网站的web前端相关的招聘信息,以广州地区为例;
2.脚本所用到的nodejs模块
express 用来搭建一个服务,将结果渲染到页面
swig 模板引擎
cheerio 用来抓取页面的数据
requests 用来发送请求数据(具体可查:https://www.npmjs.com/package/requests)
async 用来处理异步操作,解决请求嵌套的问题,脚本中只使用了async.whilst(test,iteratee,callback),具体可见:https://caolan.github.io/async/
3.实现流程:
首先先获取到所爬取页面的URL,打开boss直聘网站,搜索web前端既可以获取到 https://www.zhipin.com/c101280100-p100901/?page=1&ka=page-next
然后通过Chrome浏览器打开F12,获取到信息中多对应的dom节点,即可知道想要获取信息;
4.代码实现
目录结构:
app.js
var cheerio = require('cheerio'); var requests = require('requests'); var async = require('async'); var express = require('express'); var swig = require('swig'); var app = express(); swig.setDefaults({cache:false}); app.set('views','./views/'); app.set('view engine','html'); app.engine('html',swig.renderFile); app.get('/',function(req,res,next){ var page = 1; //当前页数 var list = []; //保存记录 async.whilst( function(){ return page < 11; }, function(callback){ requests(`https://www.zhipin.com/c101280100-p100901/?page=${page}&ka=page-next`) .on('data',function(chunk){ var $ = cheerio.load(chunk.toString()); $('.job-primary').each(function(){ var company = $(this).find('.info-company .company-text .name').text(); var job_title = $(this).find('.info-primary .name .job-title').text(); var salary = $(this).find('.info-primary .name .red').text(); var description = $(this).find('.info-company .company-text p').text(); var area = $(this).find('.info-primary p').text(); var item = { company:company, job_title:job_title, salary:salary, description:description, area:area }; list.push(item); }); page++; callback(); }).on('end',function(err){ if(err){ console.log(err); } if(page==10){ res.render('index',{ lists:list }); } }); }, function(err){ console.log(err); } ); }); //监听 app.listen(8080);
view/index.html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <style> table{ width:1300px; border:1px solid #ccc; border-collapse: collapse; text-align: center; margin:0 auto; } td,tr,th{ border:1px solid #ccc; border-collapse: collapse; } tr{ height:30px; line-height: 30px; } </style> <body> <table> <thead> <tr> <th>公司名称</th> <th>公司地址</th> <th>薪资</th> <th>公司描述</th> <th>岗位名称</th> </tr> </thead> <tbody> {% for list in lists %} <tr> <td>{{list.company}}</td> <td>{{list.area}}</td> <td>{{list.salary}}</td> <td>{{list.description}}</td> <td>{{list.job_title}}</td> </tr> {% endfor %} </tbody> </table> </body> </html>
5.启动
直接通过 node app.js启动即可;
6.运行结果(http://localhost:8080),只截取部分数据
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:同源策略
- js防止表单重复提交实现代码 2020-03-29
- 基于JQuery的多标签实现代码 2020-03-29
- js实现翻页后保持checkbox选中状态的实现方法 2020-03-25
- NiftyCube实现圆角边框的方法 2020-03-20
- JS简单去除数组中重复项的方法 2020-03-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash