简单的爬虫

本文介绍了如何在Node.js环境下构建一个简单的网络爬虫。首先,文章指出尽管Node.js不适合构建网站,但在Linux环境下非常适合编写爬虫。接着,通过创建项目目录结构,配置package.json以管理依赖(如jQuery、jsdom等),并使用npm安装这些依赖。在完成这些准备工作后,作者展示了在app.js中编写爬虫代码,该代码通过HTTP GET请求获取Google香港首页内容,然后使用jQuery解析HTML并提取特定元素。最后,运行爬虫,输出结果为"English"。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前文提到,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去分析,获取我们需要的内容,再打印出来。(如果你觉得内容很重要,你也可以入库保存。)

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



















评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值