首頁 > web前端 > js教程 > 主體

node.js抓取並分析網頁內容有無特殊內容的js檔案_node.js

WBOY
發布: 2016-05-16 15:31:49
原創
1056 人瀏覽過

nodejs取得網頁內容綁定data事件,取得到的資料會分幾次相應,如果想全域內容匹配,需要等待請求結束,在end結束事件裡把累積起來的全域資料進行操作!

舉個例子,例如要在頁面中找有沒有www.baidu.com,不多說了,直接放程式碼:

//引入模块
var http = require("http"),
fs = require('fs'),
url = require('url');
//写入文件,把结果写入不同的文件
var writeRes = function(p, r) {
   fs.appendFile(p , r, function(err) {
    if(err)
       console.log(err);
    else
       console.log(r);
  });
},
//发请求,并验证内容,把结果写入文件
postHttp = function(arr, num) {
   console.log('第'+num+"条!")
   var a = arr[num].split(" - ");
   if(!a[0] || !a[1]) {
     return;
   }
   var address = url.parse(a[1]),
   options = {
     host : address.host,
     path: address.path,
     hostname : address.hostname,
     method: 'GET',
     headers: {
      'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36'
    }
   }
   var req = http.request(options, function(res) {
     if (res.statusCode == 200) {
        res.setEncoding('UTF-8');
        var data = '';
        res.on('data', function (rd) {  
          data += rd;
        });
        res.on('end', function(q) {
          if(!~data.indexOf("www.baidu.com")) {
             return writeRes('./no2.txt', a[0] + '--' + a[1] + '\n');            
          } else {
             return writeRes('./has2.txt', a[0] + '--' + a[1] + "\n");
          }
        })
     } else {
        writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + res.statusCode + '\n');
     }
   });
   req.on('error', function(e) {
     writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + e + '\n');
   })
   req.end();
},
//读取文件,获取需要抓取的页面
openFile = function(path, coding) {
   fs.readFile(path, coding, function(err, data) {
     var res = data.split("\n");  
     for (var i = 0, rl = res.length; i < rl; i++) {
        if(!res[i])
          continue;
        postHttp(res, i);  
     };  
   })
};
openFile('./sites.log', 'utf-8');
登入後複製

上面程式碼大家可以看的懂吧,有哪裡不清楚的朋友歡迎給我留言,具體的還要靠大家發揮應用到實踐當中。

下面要跟大家介紹Nodejs對於網頁抓取的能力

首先PHP。先說優勢:網路抓取和解析html的框架一抓一大把,各種工具直接拿來用就行了,比較省心。缺點:首先速度/效率很成問題,有一次下載電影海報的時候,由於是crontab定期執行,也沒做優化,開的php進程太多,直接把內存撐爆了。然後語法方面也很拖沓,各種關鍵字 符號 太多,不夠簡潔,給人一種沒有認真設計過的感覺,寫起來很麻煩。

Node.js。優點是效率、效率還是效率,由於網路是異步的,所以基本上如同幾百個進程並發一樣強大,內存和CPU佔用非常小,如果沒有對抓取來的數據進行複雜的運算加工,那麼系統的瓶頸基本上就在頻寬和寫入MySQL等資料庫的I/O速度。當然,優點的反面也是缺點,非同步網路代表你需要callback,這時候如果業務需求是線性了,例如必須等待上一個頁面抓取完成後,拿到數據,才能進行下一個頁面的抓取,甚至多層的依賴關係,那就會出現可怕的多層callback!基本這時候,程式碼結構和邏輯就會一團亂麻。當然可以用Step等流程控制工具解決這些問題。

最後說Python。如果你對效率沒有極端的要求,那麼推薦用Python!首先,Python的語法很簡潔,同樣的語句,可以少敲很多次鍵盤。然後,Python非常適合做資料的處理,例如函數參數的打包解包,列表解析,矩陣處理,非常方便。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!