当前位置: 移动技术网 > IT编程>开发语言>JavaScript > NodeJs实现简单的爬虫

NodeJs实现简单的爬虫

2018年12月05日  | 移动技术网IT编程  | 我要评论

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

2.脚本所用到的nodejs模块

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

    swig          模板引擎

    cheerio      用来抓取页面的数据

    requests    用来发送请求数据(具体可查:)

    async        用来处理异步操作,解决请求嵌套的问题,脚本中只使用了async.whilst(test,iteratee,callback),具体可见:

 

3.实现流程:

   首先先获取到所爬取页面的url,打开boss直聘网站,搜索web前端既可以获取到

   

   然后通过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/页面

<!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://www.lhsxpumps.com/_localhost:8080),只截取部分数据

   

  

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网