簡單的爬蟲

前文提到,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去分析,獲取我們需要的內容,再打印出來。(如果你覺得內容很重要,你也可以入庫保存。)

這樣,簡單的網絡爬蟲就完成了。



















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章