亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js抓取并分析網(wǎng)頁內(nèi)容有無特殊內(nèi)容的js文件

 更新時間:2015年11月17日 10:40:01   作者:平凡公子  
nodejs獲取網(wǎng)頁內(nèi)容綁定data事件,獲取到的數(shù)據(jù)會分幾次相應,如果想全局內(nèi)容匹配,需要等待請求結(jié)束,在end結(jié)束事件里把累積起來的全局數(shù)據(jù)進行操作,本文給大家介紹node.js抓取并分析網(wǎng)頁內(nèi)容有無特殊內(nèi)容的js文件,需要的朋友參考下

nodejs獲取網(wǎng)頁內(nèi)容綁定data事件,獲取到的數(shù)據(jù)會分幾次相應,如果想全局內(nèi)容匹配,需要等待請求結(jié)束,在end結(jié)束事件里把累積起來的全局數(shù)據(jù)進行操作!

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

//引入模塊
var http = require("http"),
fs = require('fs'),
url = require('url');
//寫入文件,把結(jié)果寫入不同的文件
var writeRes = function(p, r) {
   fs.appendFile(p , r, function(err) {
    if(err)
       console.log(err);
    else
       console.log(r);
  });
},
//發(fā)請求,并驗證內(nèi)容,把結(jié)果寫入文件
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');

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

下面給大家介紹Nodejs對于網(wǎng)頁抓取的能力

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

Node.js。優(yōu)點是效率、效率還是效率,由于網(wǎng)絡是異步的,所以基本如同幾百個進程并發(fā)一樣強大,內(nèi)存和CPU占用非常小,如果沒有對抓取來的數(shù)據(jù)進行復雜的運算加工,那么系統(tǒng)的瓶頸基本就在帶寬和寫入MySQL等數(shù)據(jù)庫的I/O速度。當然,優(yōu)點的反面也是缺點,異步網(wǎng)絡代表你需要callback,這時候如果業(yè)務需求是線性了,比如必須等待上一個頁面抓取完成后,拿到數(shù)據(jù),才能進行下一個頁面的抓取,甚至多層的依賴關(guān)系,那就會出現(xiàn)可怕的多層callback!基本這時候,代碼結(jié)構(gòu)和邏輯就會一團亂麻。當然可以用Step等流程控制工具解決這些問題。

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

相關(guān)文章

  • ubuntu編譯nodejs所需的軟件并安裝

    ubuntu編譯nodejs所需的軟件并安裝

    Node 在 Linux,Macintosh,Solaris 這幾個系統(tǒng)上都可以完美的運行,linux 的發(fā)行版本當中使用 Ubuntu 相當適合。這也是我們?yōu)槭裁匆獓L試在 ubuntu 上安裝 Node.js,
    2017-09-09
  • Node.js實現(xiàn)鏈式回調(diào)

    Node.js實現(xiàn)鏈式回調(diào)

    這篇文章介紹了Node.js實現(xiàn)鏈式回調(diào)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 輕松創(chuàng)建nodejs服務器(5):事件處理程序

    輕松創(chuàng)建nodejs服務器(5):事件處理程序

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務器(5):事件處理程序,本系列文章將一步一步創(chuàng)建一個完整的nodejs服務器,需要的朋友可以參考下
    2014-12-12
  • 從零學習node.js之詳解異步控制工具async(八)

    從零學習node.js之詳解異步控制工具async(八)

    sync是一個流程控制工具包,提供了直接而強大的異步功能?;贘avaScript為Node.js設計,同時也可以直接在瀏覽器中使用。下面這篇文章主要介紹了node.js之異步控制工具async的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • 使用nodejs爬取前程無憂前端技能排行

    使用nodejs爬取前程無憂前端技能排行

    這篇文章主要介紹了使用nodejs爬前程無憂前端技能排行,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • nodejs操作mongodb的增刪改查功能實例

    nodejs操作mongodb的增刪改查功能實例

    這篇文章主要介紹了nodejs操作mongodb的增刪改查功能,簡單分析了mongodb模塊的安裝并結(jié)合實例形式分析了nodejs操作mongodb數(shù)據(jù)庫進行增刪改查的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • node.js中的fs.createWriteStream方法使用說明

    node.js中的fs.createWriteStream方法使用說明

    這篇文章主要介紹了node.js中的fs.createWriteStream方法使用說明,本文介紹了fs.createWriteStream方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js使用express-fileupload中間件實現(xiàn)文件上傳

    node.js使用express-fileupload中間件實現(xiàn)文件上傳

    本文使用express作為服務端,使用express-fileupload庫提供的中間件函數(shù)來接受從客戶端傳來的圖片,并將圖片作為文件存儲在服務端,感興趣的可以了解一下
    2021-07-07
  • 說說node中的可讀流和可寫流的區(qū)別

    說說node中的可讀流和可寫流的區(qū)別

    這篇文章主要介紹了說說node中的可讀流和可寫流的區(qū)別,詳細的介紹了可讀流和可寫流,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Node.js的基本知識簡單匯總

    Node.js的基本知識簡單匯總

    本文主要給大家簡單介紹了Node.js的基本知識,包括概念、特點、歷史、案例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論