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

來源:互聯網
上載者:User

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

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非常適合做資料的處理,比如函數參數的打包解包,列表解析,矩陣處理,非常方便。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.