nodejs爬虫系统
2015-07-06 14:35
661 查看
其中express是服务端框架
request相当于前端的ajax请求
cheerio相当于jq
[b]开始[/b]
首先我们先新建一个 crawler目录
执行 npm install express -g 命令 和 npm install express-generator -g 命令
接着 cd crawler 进入crawler目录 执行 npm install request --save-dev 和 npm install cheerio --save-dev
然后在我们的目录下建立express项目 直接命令行执行 express
OK 我们的项目目录变成这个样子:
接下来
我们首先安装下项目的依赖,执行 npm install 就OK
那这样我们的前期工作就做好了。
[b]接着[/b]
我们打开app.js
我们来修改他。
如下:
var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('hello express'); }); app.listen(3000, function() { console.log('listening on 3000'); });
终端执行 supervisor app.js
(注:supervisor是nodejs中监控进程用的。比如我们修改了app.js 那么supervisor就会自动去重启这个文件,不需要我们手动去node app.js,用户可以通过 npm install supervisor -g 来安装。这个也是我们在nodejs开发中常用到的一个工具)
OK。
我们打开127.0.0.1:3000
看到页面上输出了 hello express。 一切正常
就下来我们看下request。我们去到npm 里面 request的官网
https://www.npmjs.com/package/request
看到关于他的使用,我们把它趴下来:
修改我们的app.js
var express = require('express'); var app = express(); var request = require('request'); app.get('/', function(req, res) { request('http://www.cnblogs.com/galenyip', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body);// Show the HTML for the Google homepage. res.send('hello express'); } }); }); app.listen(3000, function() { console.log('listening on 3000'); });
地址修改成我的博客地址吧。来爬爬我这个博客
OK,刷新我们的页面。等一会,会看到终端打印出了html相关信息。
接着,
我们用上 cheerio
在app.js中 我们就入 var cherrio = require('cherrio');
var express = require('express'); var app = express(); var request = require('request'); var cheerio = require('cheerio'); app.get('/', function(req, res) { request('http://www.cnblogs.com/galenyip', function (error, response, body) { if (!error && response.statusCode == 200) { $ = cheerio.load(body); //拿到body,作为选择器 } }); }); app.listen(3000, function() { console.log('listening on 3000'); });
同时,我们可以看到 cheerio.load(body)就是我们拿到的页面,把它作为总的选择器。
之后的,我们就可以像操作jq一样操作这个页面了。
具体的api可以到官网:
https://www.npmjs.com/package/cheerio
它的api跟jq很像,那这个就不做介绍了
其实,我们的整个爬虫就差不多了。
剩下的就是看客们根据自己的需要,去抓取页面的dom,筛选等等等等。。。。
好了。
大体就这么多了。
有不懂的,或者纰漏的,大家可以在评论里面交流拍砖。
相关文章推荐
- [LeetCode] Swap Nodes in Pairs
- Nodejs和npm学习
- leetcode Populating Next Right Pointers in Each Node 树 队列应用
- 使用DNode实现php和nodejs之间通信的简单实例
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- iPhone手机上搭建nodejs服务器步骤方法
- 使用DNode实现php和nodejs之间通信的简单实例
- Hadoop Cluster启动后数据节点(Datanode)进程状态丢失
- Node Glob
- ROS学习手记 - 3 理解ROS中的基本概念_ROS_Nodes
- NodeJS优缺点及适用场景讨论
- sublime快捷方式和node.js
- Nodejs负载均衡:haproxy,slb以及node-slb - i5ting的个人空间 - 开源中国社区
- ovirt-node 之build分析
- LeetCode 之 Populating Next Right Pointers in Each Node I II — C++ 实现
- node.js在前端这个行业中所占的比例
- node C++扩展(2) 尝试翻译node官网文档
- node.js C++ 扩展
- 【leetcode】Populating Next Right Pointers in Each Node I&&II
- 防止nodejs进程出错时退出