0. 通用爬虫框架包括:

(1) 将爬取url加入队列,并获取指定url的前端资源(crawler爬虫框架主要使用Crawler类进行抓取网页)

(2)解析前端资源,获取指定所需字段的值,即获取有价值的信息(crawler框架主要使用Cheerio解析DOM)

(3)将有价值的字段内容存储,持久化到数据库,或直接使用IO写入文件(使用Node.js的IO操作或数据库操作)

特性:

(1)一般获取到前端资源后通过管道传输数据并异步处理数据;或者使用异步回调函数进行处理数据

1. node-crawler的下载与安装

(1)使用Web Storm新建一个空项目

(2)在空项目下执行npm init --yes创建packages.json文件管理已安装包

(3)安装爬虫crawler包

npm install crawler

a. 在nodejs根目录下运行, 也能在项目根目录下运行, 在哪个目录下运行则安装在哪个目录的node_modules目录下

b. 如果在应用程序的根目录下运行,则会安装在项目根目录下生成文件夹node_modules, 里面是安装包

2. 第一个简单的crawler爬虫应用程序

server.js

var Crawler = require("crawler");

var c = new Crawler({
    maxConnections : 10,
    // 这个回调每个爬取到的页面都会触发
    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            // $默认使用Cheerio
            // 这是为服务端设计的轻量级jQuery核心实现
            console.log($("title").text());
        }
        done();
    }
});

// 爬取一个URL,使用默认的callback
c.queue('http://www.taobao.com');

// 爬取URL列表
c.queue(['http://www.jd.com/','http://www.baidu.com']);

// 爬取页面,自定义callback和参数
c.queue([{
    uri: 'http://www.youku.com/',
    jQuery: false,

    // 覆盖全局的callback
    callback: function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            console.log('Grabbed', res.body.length, 'bytes');
        }
        done();
    }
}]);

// 在队列中加入一些HTML代码,无需爬取(mostly for tests)
c.queue([{
    html: '<p>This is a <strong>test</strong></p>'
}]);

在控制台输入node server.js运行; 或者使用IDE工具中的Debugger工具

爬虫Crawler经典模型伪代码:

c = new Crawler();

handler = [{
    'uri': url,
    'jquery':true,
    'callback': function(){
     data = crawler_get_data();
     res = db_store_data(data);      # 也可以在这里获取新的url,并将新的url添加到爬虫中
    }
}];

c.queue(handler)

3. 使用Cheerio即jQuery的核心实现来操作DOM元素,所有操作DOM的API和jQuery是一模一样的

优点:

a. 熟悉的语法,和jQuery操作DOM是一模一样的

b. 解析速度快,至少是JSDOM的8倍

c. 极其灵活,使用htmlparser2,几乎可以解析所有的html和xml

(1)解析html

$ = cheerio.load(html, {})

(2)选择器

(3)属性操作

attr()

removeAttr()

addClass()

removeClass()

hasClass()

(4)遍历

find()

parent()

next()

prev()

siblings()

children()

each()

map()

filter()

first()

last()

eq()

(5)操作DOM

append()

prepend()

before()

after()

remove()

replaceWith()

empty()

html()

text()

(6)解析和渲染

html()

toArray()

clone()

如何将HTML页面提取出部分文本内容
  • 去除网页中的HTML标签
  • 将网页中的HTML标签替换为空字符串
  • 使用cherrio模块实现内容提取

使用Node.js搭建数据爬虫crawler的更多相关文章

  1. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

  2. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  3. 使用Node.js搭建静态资源服务器

    对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...

  4. 使用 Node.js 搭建微服务网关

    目录 Node.js 是什么 安装 node.js Node.js 入门 Node.js 应用场景 npm 镜像 使用 Node.js 搭建微服务网关 什么是微服务架构 使用 Node.js 实现反向 ...

  5. node.js主从分布式爬虫

    前言 前文介绍过用Python写爬虫,但是当任务多的时候就比较慢, 这是由于Python自带的http库urllib2发起的http请求是阻塞式的,这意味着如果采用单线程模型,那么整个进程的大部分时间 ...

  6. 使用 Node.js 搭建 Web 服务器

    使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块.文件系统.url解析模块.路径解析模块.以及301重定向技术等, ...

  7. node.js搭建代理服务器请求数据

    1.引入node.js中的模块 var http = require("http"); var url = require("url"); var qs = r ...

  8. node.js 89行爬虫爬取智联招聘信息

    写在前面的话, .......写个P,直接上效果图.附上源码地址  github/lonhon ok,正文开始,先列出用到的和require的东西: node.js,这个是必须的 request,然发 ...

  9. Node.js大众点评爬虫

    大众点评上有很多美食餐馆的信息,正好可以拿来练练手Node.js. 1. API分析 大众点评开放了查询商家信息的API,这里给出了城市与cityid之间的对应关系,链接http://m.api.di ...

随机推荐

  1. sublime实现背景透明化

    预览 老司机们就不要吐槽背景图了 实现方法 首先下载插件,直接打包下载zip即可 地址:https://github.com/vhanla/SublimeTextTrans 下载完成后解压到packa ...

  2. #WEB安全基础 : HTML/CSS | 0x6嵌套标签(图片链接)

    嵌套标签我们已经讲一次了,在0X4.1里,我们把列表嵌套了 你觉得文字链接难看得令人作呕,好,你再也不会有这种感觉了   一如既往,一个html文件和一个存放图片的文件夹 index.html的代码, ...

  3. 美团技术沙龙01 - 58到家服务的订单调度&数据分析技术

    1. 2015.4.15 到家服务的订单调度&数据分析技术 58到家· 黄海斌 @xemoaya 2.agenda • 58到家介绍 • 订单管理系统介绍 • 数据分析技术的应用 3.2015 ...

  4. 2019Java查漏补缺(二)

    查看了公众号:java之间的整理的集和文章,文章地址 总结和搜索了一下网络知识,总结了一下: 1.String 的hashcode()方法 2.switch总结: 3.如何实现克隆 1.String ...

  5. 【案例分享】crontab执行脚本异常问题

    很多时候我们会遇见这种情况,我们千辛万苦写了一个脚本,经过测试,一切正常,然后放到了crontab里面执行,结果,不管怎么配置,就是执行不正常. 结果发现环境问题,居然是这个异常的元凶. 我们先在我们 ...

  6. LeetCode算法题-Binary Tree Tilt(Java实现)

    这是悦乐书的第263次更新,第276篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第130题(顺位题号是563).给定二叉树,返回整棵树的倾斜度.树节点的倾斜被定义为所有 ...

  7. WIN提权总结【本地存档-转载】

    [ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...

  8. 比较两个slice、struct或者map是否相等

    我们可以直接使用reflect.DeepEqual来比较两个slice.struct或者map是否相等 package main import ( "fmt" "refl ...

  9. RabbitMQ持久化

    我们知道,如果消息接收端挂了,消息会保存在队列里.下次接收端启动就会接收到消息. 如果RabbitMQ挂了怎么办呢?这时候需要将消息持久化到硬盘 消息发送端:producer ........... ...

  10. 日志学习系列(三)——NLog基础知识

    前边我们解释了log4net的学习,我们再介绍一下NLog 一.什么是NLog NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单 ...