node.js抓取并分析網(wǎng)頁(yè)內(nèi)容有無(wú)特殊內(nèi)容的js文件
nodejs獲取網(wǎng)頁(yè)內(nèi)容綁定data事件,獲取到的數(shù)據(jù)會(huì)分幾次相應(yīng),如果想全局內(nèi)容匹配,需要等待請(qǐng)求結(jié)束,在end結(jié)束事件里把累積起來(lái)的全局?jǐn)?shù)據(jù)進(jìn)行操作!
舉個(gè)例子,比如要在頁(yè)面中找有沒(méi)有www.baidu.com,不多說(shuō)了,直接放代碼:
//引入模塊
var http = require("http"),
fs = require('fs'),
url = require('url');
//寫(xiě)入文件,把結(jié)果寫(xiě)入不同的文件
var writeRes = function(p, r) {
fs.appendFile(p , r, function(err) {
if(err)
console.log(err);
else
console.log(r);
});
},
//發(fā)請(qǐng)求,并驗(yàn)證內(nèi)容,把結(jié)果寫(xiě)入文件
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();
},
//讀取文件,獲取需要抓取的頁(yè)面
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ā)揮應(yīng)用到實(shí)踐當(dāng)中。
下面給大家介紹Nodejs對(duì)于網(wǎng)頁(yè)抓取的能力
首先PHP。先說(shuō)優(yōu)勢(shì):網(wǎng)上抓取和解析html的框架一抓一大把,各種工具直接拿來(lái)用就行了,比較省心。缺點(diǎn):首先速度/效率很成問(wèn)題,有一次下載電影海報(bào)的時(shí)候,由于是crontab定期執(zhí)行,也沒(méi)做優(yōu)化,開(kāi)的php進(jìn)程太多,直接把內(nèi)存撐爆了。然后語(yǔ)法方面也很拖沓,各種關(guān)鍵字 符號(hào) 太多,不夠簡(jiǎn)潔,給人一種沒(méi)有認(rèn)真設(shè)計(jì)過(guò)的感覺(jué),寫(xiě)起來(lái)很麻煩。
Node.js。優(yōu)點(diǎn)是效率、效率還是效率,由于網(wǎng)絡(luò)是異步的,所以基本如同幾百個(gè)進(jìn)程并發(fā)一樣強(qiáng)大,內(nèi)存和CPU占用非常小,如果沒(méi)有對(duì)抓取來(lái)的數(shù)據(jù)進(jìn)行復(fù)雜的運(yùn)算加工,那么系統(tǒng)的瓶頸基本就在帶寬和寫(xiě)入MySQL等數(shù)據(jù)庫(kù)的I/O速度。當(dāng)然,優(yōu)點(diǎn)的反面也是缺點(diǎn),異步網(wǎng)絡(luò)代表你需要callback,這時(shí)候如果業(yè)務(wù)需求是線性了,比如必須等待上一個(gè)頁(yè)面抓取完成后,拿到數(shù)據(jù),才能進(jìn)行下一個(gè)頁(yè)面的抓取,甚至多層的依賴關(guān)系,那就會(huì)出現(xiàn)可怕的多層callback!基本這時(shí)候,代碼結(jié)構(gòu)和邏輯就會(huì)一團(tuán)亂麻。當(dāng)然可以用Step等流程控制工具解決這些問(wèn)題。
最后說(shuō)Python。如果你對(duì)效率沒(méi)有極端的要求,那么推薦用Python!首先,Python的語(yǔ)法很簡(jiǎn)潔,同樣的語(yǔ)句,可以少敲很多次鍵盤(pán)。然后,Python非常適合做數(shù)據(jù)的處理,比如函數(shù)參數(shù)的打包解包,列表解析,矩陣處理,非常方便。
相關(guān)文章
node實(shí)現(xiàn)shell命令管理工具及commander.js學(xué)習(xí)
這篇文章主要為大家介紹了node實(shí)現(xiàn)shell命令管理工具及commander.js學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
使用Node.js創(chuàng)建HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問(wèn)本地Server的步驟
Node.js含有一系列內(nèi)置模塊,使得程序可以脫離 Apache HTTP Server 或 IIS,作為獨(dú)立服務(wù)器運(yùn),下面將介紹如何簡(jiǎn)單幾步實(shí)現(xiàn)遠(yuǎn)程公共網(wǎng)絡(luò)下訪問(wèn)windwos node.js的服務(wù)端,感興趣的朋友一起看看吧2023-11-11
Node.js實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)的示例代碼
在web開(kāi)發(fā)中,我們常常需要對(duì)一些敏感的url進(jìn)行訪問(wèn)權(quán)限控制,本文主要介紹了Node.js實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)的示例代碼,具有一定的參考價(jià)值,感興趣的了解一下2024-02-02
Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟
實(shí)際工作中,可能會(huì)遇到定時(shí)清除某個(gè)文件夾內(nèi)容,定時(shí)發(fā)送消息或發(fā)送郵件給指定用戶,定時(shí)導(dǎo)出某些數(shù)據(jù)等,node-schedule是一個(gè)非常不錯(cuò)的npm包,可以幫助我們快速的創(chuàng)建和管理定時(shí)任務(wù),所以本文介紹了Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟,需要的朋友可以參考下2024-09-09
在Express中提供靜態(tài)文件的實(shí)現(xiàn)方法
這篇文章主要介紹了在Express中提供靜態(tài)文件的實(shí)現(xiàn)方法,將包含靜態(tài)資源的目錄的名稱傳遞給 express.static 中間件函數(shù),以便開(kāi)始直接提供這些文件,感興趣的可以了解一下2019-10-10
基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解
這篇文章主要為大家介紹了基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
nodeJs爬蟲(chóng)獲取數(shù)據(jù)簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了nodeJs爬蟲(chóng)獲取數(shù)據(jù)簡(jiǎn)單實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下2016-03-03
如何讓Nodejs支持H5 History模式(connect-history-api-fallback源碼分析)
這篇文章主要介紹了如何讓Nodejs支持H5 History模式(connect-history-api-fallback源碼分析),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05

