1. superagent

superagent 是一个流行的nodejs第三方模块,专注于处理服务端/客户端的http请求。在nodejs中,我们可以使用内置的http等模块来进行请求的发送、响应处理等操作,不过superagent提供了更加简单、优雅的API,让你在处理请求时更加方便。而且它很轻量,学习曲线平滑,内部其实就是对内置模块的封装。

可以认为是node端的ajax

request

.post('/api/pet')

.send({ name: 'Manny', species: 'cat' })

.set('X-API-Key', 'foobar')

.set('Accept', 'application/json')

.end(function(err, res){

if (err || !res.ok) {

alert('Oh no! error');

} else {

alert('yay got ' + JSON.stringify(res.body));

}

});

2. supervisor node

supervisor 可以监视代码的改动,并自动重启 Node.js,保证改动服务器代码后,不用手动重启服务器

npm -g install supervisor 必须全局安装

3. cheerio

在node中可以使用类似jQuery的方法操作html元素,可以方便的对爬虫到的网页html资源进行相关操作,上手容易,操作方法和jquery几乎一致

var cheerio = require("cheerio");

var server = require("./curl");

var url = "http://v.163.com/special/opencourse/englishs1.html"

server.download(url, function(data) {

if (data) {

//console.log(data);

var $ = cheerio.load(data);

$("a.downbtn").each(function(i, e) {

console.log($(e).attr("href"));

});

console.log("done");

} else {

console.log("error");

}

});

4. 爬虫逻辑实现完整代码演示

功能页面获取数据如下:

var superagent = require('superagent');

var cheerio = require('cheerio');

var url = require('url');

var qs = require('querystring');

var cnodeUrl = "https://www.xxxx.com/";

var CNode = function(url) {

cnodeUrl = url;

}

CNode.prototype = {

getData: function(res) {   此处resindex页面中的res

superagent.get(cnodeUrl)   实现类似ajax获取页面数据

.end(function(err, sres) {   写回调函数

if (err) throw err;

 var $ = cheerio.load(sres.text);   引入cheerio入口

 cheerio的类似jquery操作

var lastPageUrl = $('.className li:last-child').find('a').attr('href');

var queryUrl = url.parse(lastPageUrl).query;  获取url参数

var obj = qs.parse(queryUrl);

var totalPages = obj.page;

var items = [];  设置数组,存储需要的数据

$('#id .className').each(function(index, element) {

var $element = $(element);

var type = $element.parent().parent().find('.topic_tab').text();

items.push({

title: $element.attr('title'),

href: $element.attr('href'),

link: url.resolve(cnodeUrl, $element.attr('href')),

type: type

})

console.log(items)

})

items.totalPages = totalPages;

res.send(items);  向页面发送处理好的数据

})

}

}

module.exports = CNode;   对外暴露数据

index页面加载数据如下:(由于是在express assistant环境下写创建的,所以此处是以路由形式向外暴露,服务器运行在bin/www文件中)

var express = require('express');

var router = express.Router();

var CNode = require('./cnode');

/* GET home page. */

router.get('/', function(req, res, next) {

var requestUrl = " https://www.xxxx.com/";

var _cnode = new CNode(requestUrl);

_cnode.getData(res);

});

module.exports = router;

5. node-schedule 实现定时任务(可与高并发结合)

6. async实现高并发(限制不能频繁访问服务器)

Nodejs 网络爬虫(资讯爬虫) 案例的更多相关文章

  1. NodeJS网络爬虫

      原文地址:NodeJS网络爬虫   网上有很多其他语言平台版本的网络爬虫,比如Python,Java.那怎么能少得了我们无所不能的javascript呢

  2. NodeJs实现简单的爬虫

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

  3. 【java爬虫】---爬虫+基于接口的网络爬虫

    爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...

  4. 中国爬虫违法违规案例汇总github项目介绍

    中国爬虫违法违规案例汇总github项目介绍 GitHub - 本项目用来整理所有中国大陆爬虫开发者涉诉与违规相关的新闻.资料与法律法规.致力于帮助在中国大陆工作的爬虫行业从业者了解我国相关法律,避免 ...

  5. 【java爬虫】---爬虫+jsoup轻松爬博客

    爬虫+jsoup轻松爬博客 最近的开发任务主要是爬虫爬新闻信息,这里主要用到技术就是jsoup,jsoup 是一款 Java的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非 ...

  6. [爬虫]Python爬虫基础

    一.什么是爬虫,爬虫能做什么 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.比如它在抓取一个网 ...

  7. (Pyhton爬虫03)爬虫初识

    原本的想法是这样的:博客整理知识学习的同时,也记录点心情...集中式学习就没这么多好记录的了! 要学习一门技术,首先要简单认识一下爬虫!其实可以参考爬虫第一章! 整体上介绍该技术包含技能,具体能做什么 ...

  8. python3爬虫--反爬虫应对机制

    python3爬虫--反爬虫应对机制 内容来源于: Python3网络爬虫开发实战: 网络爬虫教程(python2): 前言: 反爬虫更多是一种攻防战,针对网站的反爬虫处理来采取对应的应对机制,一般需 ...

  9. PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

随机推荐

  1. PHP开发搭建环境二:开发工具PhpStorm安装、激活以及配置

    关于php的开发工具很多,目前市面上最好用最强大的莫过于PhpStorm这款开发神器了,但是鉴于很多开发者朋友在网站上下载的PhpStorm开发工具不能用,或者使用起来很不方便,笔者把最好用的下载地址 ...

  2. 【linux】【指令】systemctl 指令部分解读

    systemctl [OPTIONS...] {COMMAND} ... Query or send control commands to the systemd manager. -h --hel ...

  3. POJ:3259-Wormholes(最短路判断负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58153 Accepted: 21747 Descripti ...

  4. [CodeForces954G]Castle Defense(二分答案+差分)

    Description 题目链接 Solution 二分答案,套一个差分标记即可 每次放弓箭手显然越右边越优 Code #include <cstdio> #include <alg ...

  5. dijkstra算法与优先队列

    这是鄙人的第一篇技术博客,作为算法小菜鸟外加轻度写作障碍者,写技术博客也算是对自己的一种挑战和鞭策吧~ 言归正传,什么是dijkstra算法呢? -dijkstra算法是一种解决最短路径问题的简单有效 ...

  6. Flask错误收集 【转】

    感谢大佬 ---> 原文链接 一.pydev debugger: process XXXXX is connecting 这个错误网上找了很多资料都无法解决,尝试过多种方法后,对我来说,下面这个 ...

  7. zedboard烧写SD卡启动linux镜像

    1. 先把SD卡格式化,然后把镜像文件拷贝到SD卡,下面应该是没有文件系统的 2. 插上SD卡,Zedboard设置启动模式,有5个跳线帽,配置如下,上电启动 3. 看下串口的输出

  8. laravel5.5探究容器的秘密

    目录 1. 定义一个契约(接口) 2. 一个实现这个接口的类 3. 创建服务提供者 4. 注册服务提供者 5. 创建facades 6. 再然后需要到配置文件config/app.php中注册门面类别 ...

  9. 网易考拉Android客户端网络模块设计

    本文来自网易云社区 作者:王鲁才 客户端开发中不可避免的需要接触到访问网络的需求,如何把访问网络模块设计的更具有扩展性是每一个移动开发者不得不面对的事情.现在有很多主流的网络请求处理框架,如Squar ...

  10. Spring进阶—如何用Java代码实现邮件发送(一)

    相关文章: <Spring进阶—如何用Java代码实现邮件发送(二)> 在一些项目里面如进销存系统,对一些库存不足发出预警提示消息,招聘网站注册用户验证email地址等都需要用到邮件发送技 ...