NodeJS爬虫系统初探

NodeJS爬虫系统

NodeJS爬虫系统

0. 概论

爬虫是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上是针对爬虫而做出的优化。

robots.txt是一个文本文件,robots.txt是一个协议,不是一个命令。robots.txt是爬虫要查看的第一个文件。robots.txt文件告诉爬虫在服务器上什么文件是可以被查看的,搜索机器人就会按照该文件中的内容来确定访问的范围。

一般网站的robots.txt查找方法:

例如www.qq.com

http://www.qq.com/robots.txt

1. 配置爬虫系统和开发环境

所需Node模块;

  • Express
  • Request
  • Cheerio

直接在桌面创建spider项目

1.[KANO@kelvin 桌面]$ express spider2.bash: express: 未找到命令...3.安装软件包“nodejs-express”以提供命令“express”? [N/y] y4.5.6. * 正在队列中等待... 7.下列软件包必须安装:8. nodejs-buffer-crc32-0.2.1-8.fc21.noarch    A pure JavaScript CRC32 algorithm that plays nice with binary data9. nodejs-commander-2.2.0-2.fc21.noarch   Node.js command-line interfaces made easy10.………………………………………(略)……………………………………………………………11. nodejs-vhost-1.0.0-2.fc21.noarch   Virtual domain hosting middleware for Node.js and Connect12. nodejs-compressible-1.0.1-2.fc21.noarch    Compressible Content-Type/MIME checking for Node.js13. nodejs-negotiator-0.4.3-2.fc21.noarch  An HTTP content negotiator for Node.js14.   create : spider/app.js15.   create : spider/public16.   create : spider/public/images17.   create : spider/routes18.   create : spider/routes/index.js19.   create : spider/routes/user.js20.   create : spider/public/stylesheets21.   create : spider/public/stylesheets/style.css22.   create : spider/views23.   create : spider/views/layout.jade24.   create : spider/views/index.jade25.   create : spider/public/javascripts26.27.   install dependencies:28.     $ cd spider && npm install29.30.   run the app:31.     $ node app32.33.

然后进到目录下,执行安装

1.[KANO@kelvin 桌面]$ cd spider/2.[KANO@kelvin spider]$ sudo npm install3.[sudo] KANO 的密码:4.npm http GET https://registry.npmjs.org/express/3.5.25.npm http GET https://registry.npmjs.org/jade6.……………………(略)…………………………7.npm http 200 https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz8.jade@1.11.0 node_modules/jade9.├── character-parser@1.2.110.├── void-elements@2.0.111.├── commander@2.6.012.├── mkdirp@0.5.1 (minimist@0.0.8)13.├── jstransformer@0.0.2 (is-promise@2.1.0, promise@6.1.0)14.├── clean-css@3.4.8 (commander@2.8.1, source-map@0.4.4)15.├── constantinople@3.0.2 (acorn@2.6.4)16.├── with@4.0.3 (acorn@1.2.2, acorn-globals@1.0.9)17.├── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5)18.└── uglify-js@2.6.1 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.5.3, yargs@3.10.0)19.20.express@3.5.2 node_modules/express21.├── methods@0.1.022.├── merge-descriptors@0.0.223.├── cookie@0.1.224.├── debug@0.8.125.├── cookie-signature@1.0.326.├── range-parser@1.0.027.├── fresh@0.2.228.├── buffer-crc32@0.2.129.├── mkdirp@0.4.030.├── commander@1.3.2 (keypress@0.1.0)31.├── send@0.3.0 (debug@0.8.0, mime@1.2.11)32.└── connect@2.14.5 (response-time@1.0.0, pause@0.0.1, connect-timeout@1.0.0, method-override@1.0.0, vhost@1.0.0, qs@0.6.6, basic-auth-connect@1.0.0, bytes@0.3.0, static-favicon@1.0.2, raw-body@1.1.4, errorhandler@1.0.0, setimmediate@1.0.1, cookie-parser@1.0.1, morgan@1.0.0, serve-static@1.1.0, express-session@1.0.2, csurf@1.1.0, serve-index@1.0.1, multiparty@2.2.0, compression@1.0.0)33.

安装完之后,启动

1.[KANO@kelvin spider]$ node app2.Express server listening on port 30003.GET / 200 793ms - 170b4.GET /stylesheets/style.css 200 20ms - 110b5.

默认开启3000端口

kelvin是我的hostname,不知道的请用:

1.[KANO@kelvin spider]$ hostname2.kelvin

接着安装request

1.[KANO@kelvin spider]$ sudo npm install request --save-dev2.[sudo] KANO 的密码:3.npm http GET https://registry.npmjs.org/request4.npm http 200 https://registry.npmjs.org/request5.……………………(略)…………………………6.npm http 200 https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz7.request@2.67.0 node_modules/request8.├── is-typedarray@1.0.09.├── aws-sign2@0.6.010.├── forever-agent@0.6.111.├── caseless@0.11.012.├── stringstream@0.0.513.├── tunnel-agent@0.4.214.├── oauth-sign@0.8.015.├── isstream@0.1.216.├── json-stringify-safe@5.0.117.├── extend@3.0.018.├── node-uuid@1.4.719.├── qs@5.2.020.├── tough-cookie@2.2.121.├── form-data@1.0.0-rc3 (async@1.5.0)22.├── mime-types@2.1.8 (mime-db@1.20.0)23.├── combined-stream@1.0.5 (delayed-stream@1.0.0)24.├── bl@1.0.0 (readable-stream@2.0.5)25.├── hawk@3.1.2 (cryptiles@2.0.5, sntp@1.0.9, boom@2.10.1, hoek@2.16.3)26.├── http-signature@1.1.0 (assert-plus@0.1.5, jsprim@1.2.2, sshpk@1.7.1)27.└── har-validator@2.0.3 (commander@2.9.0, pinkie-promise@2.0.0, is-my-json-valid@2.12.3, chalk@1.1.1)28.

request模块已经安装上了

安装cheerio

1.[KANO@kelvin spider]$ sudo npm install cheerio --save-dev2.[sudo] KANO 的密码:3.npm http GET https://registry.npmjs.org/cheerio4.npm http 200 https://registry.npmjs.org/cheerio5.npm http GET https://registry.npmjs.org/css-select6.……………………(略)…………………………7.npm http 304 https://registry.npmjs.org/isarray/0.0.18.npm http 304 https://registry.npmjs.org/core-util-is9.cheerio@0.19.0 node_modules/cheerio10.├── entities@1.1.111.├── lodash@3.10.112.├── css-select@1.0.0 (boolbase@1.0.0, css-what@1.0.0, nth-check@1.0.1, domutils@1.4.3)13.├── dom-serializer@0.1.0 (domelementtype@1.1.3)14.└── htmlparser2@3.8.3 (domelementtype@1.3.0, domutils@1.5.1, entities@1.0.0, domhandler@2.3.0, readable-stream@1.1.13)

现在cheerio和request都装上了,这么一整个开发环境就装好了

2. 爬虫实战

关于expressjs中文文档:www.expressjs.com.cn

将其替换到app.js

监控node进程

1.[KANO@kelvin spider]$ supervisor start app.js2.3.Running node-supervisor with4.  program ‘app.js‘5.  --watch ‘.‘6.  --extensions ‘node,js‘7.  --exec ‘node‘8.9.Starting child process with ‘node app.js‘10.Watching directory ‘/home/KANO/桌面/spider‘ for changes.11.Express server listening on port 300012.

刷新窗口

关于request文档:https://www.npmjs.com/package/request

将其复制到app.js中,爬取果壳网的页面

1.var express = require(‘express‘);2.var app = express();3.var request = require(‘request‘);4.app.get(‘/‘, function(req, res){5.  request(‘http://mooc.guokr.com/course/‘, function (error, response, body) {6.    if (!error && response.statusCode == 200) {7.      console.log(body); // Show the HTML for the Google homepage.8.      res.send(‘hello world‘);9.    }10.  })11.});12.13.app.listen(3000);

刷新一下kelvin:3000

打印出的页面输出在终端上

下面对页面内容进行选择,使用cheerio

关于cheerio文档:https://www.npmjs.com/package/cheerio

对页面进行分析

要爬取课程名,查到课程名在<h3 class=‘course-title‘></h3><span></span>

1.var express = require(‘express‘);2.var app = express();3.var request = require(‘request‘);4.var cheerio = require(‘cheerio‘);5.app.get(‘/‘, function(req, res){6.  request(‘http://mooc.guokr.com/course/‘, function (error, response, body) {7.    if (!error && response.statusCode == 200) {8.      $ = cheerio.load(body);//当前的$是一个拿到了整个body的前端选择器9.      res.json({10.        ‘course‘: $(‘.course-title span‘).text()11.      });12.    }13.  })14.});15.16.app.listen(3000);

刷新一下,页面

一个简单的爬虫就完成了。

但是如果需要异步请求还得更改代码,同时还得对爬下来的数据进行处理……………还有多多不完善之处,今天的node.js爬虫初探就这样吧~

时间: 2024-07-30 10:15:27

NodeJS爬虫系统初探的相关文章

nodejs爬虫系统

其中express是服务端框架 request相当于前端的ajax请求 cheerio相当于jq 开始 首先我们先新建一个 crawler目录 执行 npm install express -g 命令 和  npm install express-generator -g 命令 接着 cd crawler 进入crawler目录   执行 npm install request --save-dev  和  npm install cheerio --save-dev 然后在我们的目录下建立ex

用python3.x与mysql数据库构建简单的爬虫系统(转)

这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言,就像本屌丝一样,一学就对它产生好感了!当然,想要精通它还有很多东西需要学习.那废话不多说了,下面我就来说一下如何用python3.x与mysql数据库构建一个简单的爬虫系统(其实就是把从网页上爬下来的内容存储到mysql数据库中). 首先就是搭建环境了,这里就简介绍一下我的环境吧.本机的操作系统是w

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

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

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

微信公众号 文章的爬虫系统

差不多俩个星期了吧,一直在调试关于微信公众号的文章爬虫系统,终于一切都好了,但是在这期间碰到了很多问题,今天就来回顾一下,总结一下,希望有用到的小伙伴可以学习学习. 1.做了俩次爬虫了,第一次怕的凤凰网,那个没有限制,随便爬,所以也就对自动化执行代码模块放松了警惕,觉得挺简单的,但是其实不是这样的,我被这个问题困扰了好几天,差不多4天的一个样子,因为搜狗做的限制,同一个ip获取的次数多了,首先是出现验证码,其次是就是访问限制了,直接就是不能访问,利用 request得到的就是访问次数过于频繁,这

第一个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