NodeJs实现简单的爬虫

更新日期: 2018-12-05阅读: 2.7k标签: node

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前端既可以获取到。然后通过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)

来源:https://www.cnblogs.com/Adver/archive/2018/12/04/10068411.html


链接: https://www.fly63.com/article/detial/1499

关于 Node.js 里 ES6 Modules 的一次更新说明

关于 Node.js 里 ES6 Modules 的一次更新说明,总结来说:CommonJS 与 ES6 Modules 之间的关键不同在于代码什么时候知道一个模块的结构和使用它。

用node.js开发一个可交互的命令行应用

在这个教程中,我们会开发一个命令行应用,它可以接收一个 CSV 格式的用户信息文件,教程的内容大纲:“Hello,World”,处理命令行参数,运行时的用户输入,异步网络会话,美化控制台的输出,封装成 shell 命令,JavaScript 之外

Node启动https服务器

首先你需要生成https证书,可以去付费的网站购买或者找一些免费的网站,可能会是key或者crt或者pem结尾的。不同格式之间可以通过OpenSSL转换

nodejs 异步转同步

nodej项目在微信环境开发,nodejs的异步特效,会导致请求没有完成就执行下面的代码,出现错误。经过多方查找,可以使用async模块来异步转同步,只有前一个function执行callback,下一个才会执行。

基于node服务器的大文件(G级)上传

3G的大文件分1500个2M二进度文件,通post方法发送给node服务,服务器全部接收到文件后,进组装生成你上文件。

为什么要把 JavaScript 放到服务器端上运行?

JavaScript比C的开发门槛要低,尽管服务器端JavaScript存在已经很多年了,但是后端部分一直没有市场,JavaScript在浏览器中有广泛的事件驱动方面的应用,考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因,JavaScript成为了Node的实现语言。

了解node.js事件循环

node.js的第一个基本论点是I / O的性能消耗是很昂贵。因此,使用当前编程技术的最大浪费来自于等待I / O完成。有几种方法可以处理性能影响

Node.js 应用:Koa2 使用 JWT 进行鉴权

在前后端分离的开发中,通过 Restful API 进行数据交互时,如果没有对 API 进行保护,那么别人就可以很容易地获取并调用这些 API 进行操作。那么服务器端要如何进行鉴权呢?

Node.js 前端开发指南

我们经常跟Node.js打交道,即使你是一名前端开发人员 -- npm脚本,webpack配置,gulp任务,程序打包 或 运行测试等。即使你真的不需要深入理解这些任务,但有时候你会感到困惑,会因为缺少Node.js的一些核心概念而以非常奇怪的方式来编码。

happypack提升项目构建速度

运行在 Node.js 之上的 Webpack 是单线程模型的,也就是说 Webpack 需要处理的任务需要一件件挨着做,不能多个事情一起做。happypack把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!