简单的爬虫

来源:互联网 发布:vb.net select 编辑:程序博客网 时间:2024/05/21 14:44
前文提到,nodejs可以做很多东西。但是,我一直觉得,nodejs是不合适去写网站的,至少现在不合适。所以,在这里我介绍怎么用nodejs去做一个简单的爬虫。
(想了解nodejs怎么写网站的话,你可以点这里:https://github.com/nswbmw/N-blog/wiki/_pages)

接下来我要实现的爬虫的功能:访问一个url,然后获取里面需要的信息。

准备条件:安装好nodejs的环境,(建议在linux上学习,因为windows上面,很多第三方库都不支持,常常安装失败。)

预备知识:用nodejs写过helloworld的demo。

(我的笔记本常常出问题,所以现在我的教程只能基于windows的环境 &&nodejs.version = v.0.10.10 , 不过代码在linux下一样照样可以正常运行)

第一步:按照 Infoq上面的田永强叔叔的建议,我习惯采用如下的目录结构,所以,大家新建一个这样的目录结构:
├── Makefile // 构建文件,通常用于启动单元测试运行等操作├── app.js // 应用文件├── automation  // 自动化测试目录├── bin  // 存放启动应用相关脚本的目录├── conf  // 配置文件目录├── controllers  // 控制层目录├── helpers  // 帮助类库├── middlewares  // 自定义中间件目录├── models  // 数据层目录├── node_modules  // 第三方模块目录├── package.json  // 项目包描述文件├── public  // 静态文件目录│   ├── images  // 图片目录│   ├── libs  // 第三方前端JavaScript库目录│   ├── scripts  // 前端JavaScript脚本目录│   └── styles  // 样式表目录├── test  // 单元测试目录└── views  // 视图层目录

第二步:在你的package.json敲下:
{  "name": "simple_spider",  "version": "0.0.1",  "scripts": {    "start": "node app.js"  },  "dependencies": {    "jQuery"  :"*",    "jsdom"   : "https://github.com/tmpvar/jsdom/tarball/4cf155a1624b3fb54b2eec536a0c060ec1bab4ab",    "xmlhttprequest" : "*",    "request" : "*",    "htmlparser" : "*"  }}
这个配置文件,主要是用来解决nodejs中的包依赖关系,就像linux系统中各种包管理器来安装软件一样。

name = 应用的名字 ; version = 应用的版本 ;
dependencies = 依赖关系主要在这里声明。例如上面的配置文件,就说明了本应用需要:jQuery包(与前端的jquery库不是一个东西,但功能差不多。jsdom , xmlhttprequest,request,htmlparser这四个东西,都是jQuery需要的依赖包)。

这里我需要特别说明一下,在linux下,如果你需要使用jQuery这个nodejs库的话,你是不需要配置jsdom,xmlhttprequest ,,,这四个东西的。但是,我的环境是windows,所以,对nodejs的依赖不是很好。所以,我要手动自行配置好jQuery的关系。所以,你是linux用户的话,可以直接这样配置:
{  "name": "simple_spider",  "version": "0.0.1",  "scripts": {    "start": "node app.js"  },  "dependencies": {    "jQuery"  :"*"  }}

第三步:打开命令行,跳转到当前目录,输入:npm install -d


然后五颜六色的东西开始不停地跑。这就说明,我们已经开始下载应用所需要的依赖包了。(依赖关系由上面的dependencies给出。)
这个命令表示只安装应用里缺少的依赖包到本地目录(不会全局污染)。
安装完毕,你的目录下面的node_modules就会多几个文件,如下图所示:
等它安装完毕,就进入第四步。

第四步:在app.js输入如下内容:
var http = require('http'),    $    = require('jQuery');var options = {    host: 'www.google.com.hk',    port: 80,    path: '/',    method: 'GET'};var req = http.get(options, function(res){        var pageData = '';    res.setEncoding('utf8');    res.on('data', function(chunk){        pageData += chunk;    });    res.on('end', function(){        var dom = $(pageData);        var elList = dom.find('#addlang a');        console.log(elList.eq(1).text());    });});
上面的代码就实现了非常简单的网络爬虫。

第五步:在终端窗口运行node app.js
你会看到 "English" 的结果输出。
过程:
      1:http句柄发出get请求,请求google.hk的网页内容,然后内容存在pageData这个变量里面。
      2:我们在用jQuery去分析,获取我们需要的内容,再打印出来。(如果你觉得内容很重要,你也可以入库保存。)

这样,简单的网络爬虫就完成了。



















原创粉丝点击