nodejs爬虫基础(一)

本文转载自:

如何用 Nodejs 分析一个简单页面----------韩子迟

本文目的



在浏览器地址栏中输入 localhost:3000,在页面显示 博客园首页 的 20 篇文章标题。

过程分析



首先需要端口的监听,这就需要引入 Node 中最重要的模块之一 express。其次需要对 http://www.cnblogs.com/ 页面发送类似 http 的请求以获取页面数据进行分析,这里需要引入 SuperAgent 模块。最后为了能使请求得到的 html 源码进行类似 dom 一般的操作,需要引入 cheerio 模块。

express 模块



首先第一步,我们要实现端口的监听,以便能将信息输出到页面上。

我们可以用 http 模块:

复制代码var http = require("http");
http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/html"});
  response.write("Hello World!");
  response.end();
}).listen(3000);

当然我们更可以用封装了 http 功能更加强大的 express 模块:

复制代码// 这句的意思就是引入 `express` 模块,并将它赋予 `express` 这个变量等待使用。
var express = require(‘express‘);
// 调用 express 实例,它是一个函数,不带参数调用时,会返回一个 express 实例,将这个变量赋予 app 变量。
var app = express();

// app 本身有很多方法,其中包括最常用的 get、post、put/patch、delete,在这里我们调用其中的 get 方法,为我们的 `/` 路径指定一个 handler 函数。
// 这个 handler 函数会接收 req 和 res 两个对象,他们分别是请求的 request 和 response。
// request 中包含了浏览器传来的各种信息,比如 query 啊,body 啊,headers 啊之类的,都可以通过 req 对象访问到。
// res 对象,我们一般不从里面取信息,而是通过它来定制我们向浏览器输出的信息,比如 header 信息,比如想要向浏览器输出的内容。这里我们调用了它的 #send 方法,向浏览器输出一个字符串。
app.get(‘/‘, function (req, res) {
  res.send(‘Hello World‘);
});

// 定义好我们 app 的行为之后,让它监听本地的 3000 端口。这里的第二个函数是个回调函数,会在 listen 动作成功后执行,我们这里执行了一个命令行输出操作,告诉我们监听动作已完成。
app.listen(3000, function () {
  console.log(‘app is listening at port 3000‘);
});

SuperAgent 模块



接着我们需要获取博客园首页的代码从而能进行分析。SuperAgent 就是服务端可以发送 get post 等 http 请求的模块,直接看代码,更多的 api 可以参考文档。

复制代码var express = require(‘express‘);
var superagent = require(‘superagent‘);

var app = express();

app.get(‘/‘, function (req, res, next) {
  superagent
    .get(‘http://www.cnblogs.com/‘)
    .end(function (err, ans) {
      // 常规的错误处理
      if (err) {
        return next(err);
      }

      res.send(ans.text);
    });
});

app.listen(3000, function () {
  console.log(‘app is listening at port 3000‘);
});

cheerio 模块



我们用 SuperAgent 模块获取了博客园的页面代码,而用 cheerio 则可以进行类似 Jquery 的 css 选择器操作。cheerio 模块的详细 api 可以参考 文档

完整代码


复制代码var express = require(‘express‘);
var cheerio = require(‘cheerio‘);
var superagent = require(‘superagent‘);

var app = express();

app.get(‘/‘, function (req, res, next) {
  superagent
    .get(‘http://www.cnblogs.com/‘)
    .end(function (err, sres) { // callback
      // 常规的错误处理
      if (err) {
        return next(err);
      }

      // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
      // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
      // 剩下就都是 jquery 的内容了
      var $ = cheerio.load(sres.text);
      var ans = ‘‘;
      $(‘.titlelnk‘).each(function (index, item) {
        var $item = $(item);
        ans += $item.html() + ‘<br/><br/>‘;
      });

      // 将内容呈现到页面
      res.send(ans);
    });
});

app.listen(3000, function () {
  console.log(‘app is listening at port 3000‘);
});

这时启动 localhost:3000,页面就能显示博客园首页的 20 篇文章标题啦(虽然没样式不太美观)!(当然得先 node fileName.js)

当然我们也可以直接把内容输出在控制台:

复制代码var cheerio = require(‘cheerio‘);
var superagent = require(‘superagent‘);

superagent
  .get(‘http://www.cnblogs.com/‘)
  .end(function (err, sres) { // callback
    // 常规的错误处理
    if (err) {
      console.error(err);
    }

    // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
    // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
    // 剩下就都是 jquery 的内容了
    var $ = cheerio.load(sres.text);
    $(‘.titlelnk‘).each(function (index, item) {
      var $item = $(item);
      console.log($item.text());
    });
  });

参考:《Node.js 包教不包会》

本文转载自:

如何用 Nodejs 分析一个简单页面----------韩子迟

时间: 2024-10-09 20:44:00

nodejs爬虫基础(一)的相关文章

【nodeJS爬虫】前端爬虫系列

写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园.搞不好编辑看到了就把我的账号给封了:). 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等.当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript 也可以用来写爬虫了.由于 nodejs 强大的异步特性,让我们可以轻松以异步高并发去爬取网站,当然这里的轻松指的是 cpu 的开销. 要读懂本文,其实只需要有 能看懂 Javascript 及

Nodejs爬虫进阶教程之异步并发控制

Nodejs爬虫进阶教程之异步并发控制 之前写了个现在看来很不完美的小爬虫,很多地方没有处理好,比如说在知乎点开一个问题的时候,它的所有回答并不是全部加载好了的,当你拉到回答的尾部时,点击加载更多,回答才会再加载一部分,所以说如果直接发送一个问题的请求链接,取得的页面是不完整的.还有就是我们通过发送链接下载图片的时候,是一张一张来下的,如果图片数量太多的话,真的是下到你睡完觉它还在下,而且我们用nodejs写的爬虫,却竟然没有用到nodejs最牛逼的异步并发的特性,太浪费了啊. 思路 这次的的爬

转 Python爬虫入门二之爬虫基础了解

静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML.JS.CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了. 因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容

NodeJS爬虫系统初探

NodeJS爬虫系统 NodeJS爬虫系统 0. 概论 爬虫是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上是针对爬虫而做出的优化. robots.txt是一个文本文件,robots.txt是一个协议,不是一个命令.robots.txt是爬虫要查看的第一个文件.robots.txt文件告诉爬虫在服务器上什么文件是可以被查看的,搜索机器人就会按照该文件中的内容来确定访问的范围. 一般网站的robots.txt查找方法: 例如www.qq.com http://ww

nodejs爬虫笔记(二)

node爬虫代理设置 最近想爬取YouTube上面的视频信息,利用nodejs爬虫笔记(一)的方法,代码和错误如下 var request = require('request'); var cheerio = require('cheerio');**** var url = 'https://www.youtube.com '; function crawler(url,callback){ var list = []; request(url,function(err,res){ if(e

Nodejs 爬虫简单编写

nodejs 爬虫原理,先用request请求页面内容,把内容获取到并iconv-lite设置编码格式,再用cheerio进行类似dom操作合并内容,转换写入文件中 1)获取单页面数据: var fs = require('fs') var request = require('request') var iconvLite = require('iconv-lite') var cheerio = require('cheerio') //请求 request({ url:'https://g

NodeJS 爬虫爬取LOL英雄联盟的英雄信息,superagent+cheerio+async

1.模块使用 (1)superagent:Nodejs中的http请求库(每个语言都有无数个,java的okhttp,ios的afnetworking) (2)cheerio:Nodejs中的html解析库(每个语言基本都有..) (3)async:Nodejs中的同/异步并发函数执行库(这个非常牛,其他语言同类型的不多) 2.爬取内容 多玩的英雄联盟英雄页面,通过解析页面内每个英雄的URL,然后并发请求英雄的详细数据,提取需要的数据得到结果 http://lol.duowan.com/hero

nodejs 爬虫

参考了各位大大的,然后自己写了个爬虫 用到的modules:utils.js     ---    moment module_url.js var http = require("http");   //获得页面数据 var cheerio = require("cheerio");  //分析页面数据,提取内容 var sanitize = require("validator");   //过滤没用的数据 如空格等 var fs = req

第一个nodejs爬虫:爬取豆瓣电影图片

第一个nodejs爬虫:爬取豆瓣电影图片存入本地: 首先在命令行下 npm install request cheerio express -save; 代码: var http = require('https'); //使用https模块 var fs = require('fs');//文件读写 var cheerio = require('cheerio');//jquery写法获取所得页面dom元素 var request = require('request');//发送reques