【实践】nodeJS写个简单的爬虫程序

26 篇文章 1 订阅
3 篇文章 0 订阅

写在前面

经常说SEO却从来没有写过爬虫,今天很有幸看到了关于nodeJS的爬虫程序的实现,模仿着写了个demo,权当砖头抛给大家了。

程序架构

因为是基于nodeJS,我们所需准备的架构很简单,用express4.x生成一个项目,然后再安装request和cheerio模块就可以。项目的package.json是这样的:

{
  "name": "spider",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.13.2",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "express": "~4.13.1",
    "jade": "~1.11.0",
    "morgan": "~1.6.1",
    "serve-favicon": "~2.3.0"
  },
  "devDependencies": {
    "cheerio": "^0.19.0",
    "request": "^2.67.0"
  }
}

当然你也可以直接 copy这个package.json到你自己的项目里,然后 npm install 就可以了。

cheerior模块介绍

用最简单的一句话概括 —— ”cheerior是运行在node服务端的jQuery“,也就是说 cheerior可以像jQuery一样提供简单的API去操纵DOM树。

它的API和jQuery操纵DOM的API基本一致,如果你想更深入地学习cheerior,不妨去看看它在npm的官网的标准API文档:https://www.npmjs.com/package/cheerio 。不过是英文版的哦,如果觉得看不太懂,这里还有个中文精简版的:https://cnodejs.org/topic/5203a71844e76d216a727d2e

抓取网站的源码

安装完所有的node_modules,我们就可以开始我们的抓取之旅了。当然在抓取之前我必须声明:不是每个网站的所有信息都可以爬,我们必须遵循robots协议,否则可能会涉及到法律问题。

举个例子,比如京东的robots文件:

这里写图片描述

Disallow的东西你是不能爬的,如果你去篡改这个文件那京东就可以告你侵权了。

下面再举个实际的例子,这是我抓取我们八爱网首页的一些信息,代码很简单:

app.js (为了方便我改了原本的app.js)

var express=require('express');
var request=require('request');
var cheerio=require('cheerio');
var app=express();

app.get('/',function(req,res){
  res.charset='utf-8';
  request('http://www.baai.com/',function(err,response,body){
    if(!err && response.statusCode==200){
      $=cheerio.load(body); //当前$相当于整个body的选择器
      var proInfos=$('.pro-info>h4');
      var imgs=$('.pro-img>img');
      var imgsTemp=[],proInfosTemp=[];
      for(var i=0,len=imgs.length;i<len;i++){
        imgsTemp.push(imgs.eq(i).attr('data-original'));
        proInfosTemp.push(proInfos.eq(i).html());
      }
      res.json({
        'productImage':imgsTemp,
        'proInfosName':proInfosTemp
      });
    }
  });
});

app.listen(3000);

接下来用 supervisor 启动这个node服务,对supervisor有疑问的同学欢迎出门左转翻一翻我前一篇【实践】express搭建nodeJS中间层(三),那里有比较详细的介绍。

好了,成功启动之后控制台可以看到这样的信息:

这里写图片描述

接下来我们打开浏览器,输入 127.0.0.1:3000 ,就启动这个爬虫程序了,抓取到的数据是这样的:

这里写图片描述

后话

今天就先写个简单的demo吧,感兴趣的同学可以继续研究 如何抓取 ajax 返回的内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值