Node.js做一个爬虫
一个临时的支线小任务,用node做一个爬虫,爬点贴吧的数据。
Express
express 是 Node.js 应用最广泛的 web 框架),可以用来建立一个强大的服务器端应用,包括中间件,模板引擎,路由等强大功能。
启动一个express最简单的服务代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World'); }); app.listen(3000, function () { console.log('app is listening at port 3000'); });
|
CasperJS
CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写。CasperJS简化了完整的导航场景的过程定义,提供了用于完成常见任务的实用的高级函数、方法和语法。
启动一个casper服务代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| var casper = require('casper').create({ verbose: true, logLevel: 'debug' }); casper.start(); var userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X)'; casper.userAgent(userAgentString);
|
CasperJS打开一个页面后,会建立一个沙箱,沙箱就相当于浏览器啦,可以使用浏览器文档对象的一些方法拿到想要的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| this.thenOpen(opts.url,function(){ var res = this.evaluate(function(){ var aString = "a.j_th_tit"; var rst = []; var nodeList = document.querySelectorAll(aString); var nxtString = ".pagination-item.next"; var nxt = document.querySelector(nxtString).getAttribute("href"); for (var i = 0; i < nodeList.length; i++) { var node = nodeList[i]; var title = node.innerHTML; var url = node.getAttribute("href"); if(url.indexOf("http://")==-1){ url = location.origin+url; } rst.push({title:title,url:url}); }; return {rst:rst,nxt:nxt}; }); list = res.rst; nextP = res.nxt; });
|
完整demo见我的spider。