In diesem Artikel wird hauptsächlich das Webanforderungsmodul des Node.js-Crawlers vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
In diesem Artikel wird das Webanforderungsmodul des Node.js-Crawlers vorgestellt und mit allen geteilt. Die Details lauten wie folgt:
Hinweis: Wenn Sie die neueste Nodegrass-Version herunterladen, einige Die Methoden wurden aktualisiert. Die Beispiele in diesem Artikel sind nicht mehr geeignet. Bitte überprüfen Sie die Beispiele in der Open-Source-Adresse.
1. Warum sollte ich so ein Modul schreiben?
Der Autor wollte Node.js verwenden, um einen Crawler zu schreiben. Obwohl die von der offiziellen Node.js-API bereitgestellte Methode zum Anfordern von Remote-Ressourcen sehr einfach ist, lesen Sie bitte
http://nodejs.org/api/http.html Für HTTP-Anfragen stehen zwei Methoden zur Verfügung: http.get(options, callback) und http.request(options, callback)
Sie werden es wissen Schauen Sie sich die Methode an: get Die Methode wird für Get-Anfragen verwendet, während die Anforderungsmethode weitere Parameter bereitstellt, z. B. andere Anforderungsmethoden, den Port des anfordernden Hosts usw. Anfragen für HTTPS ähneln HTTP. Das einfachste Beispiel:
var https = require('https'); https.get('https://encrypted.google.com/', function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }).on('error', function(e) { console.error(e); });
Für den obigen Code möchten wir lediglich den Remote-Host anfordern und die Antwortinformationen wie Antwortstatus, Antwortheader usw. erhalten Inhalt des Antworttextes. Der zweite Parameter der get-Methode ist eine Callback-Funktion. Dann lauscht das res-Objekt auf Daten. Der zweite Parameter der on-Methode ist ein weiterer Callback Antwortinformationen, die Sie angefordert haben), ist es sehr wahrscheinlich, dass Rückrufe bei der Bedienung erneut eingeführt werden, Schicht für Schicht, und schließlich verschwinden. . . In Bezug auf die asynchrone Programmierung sind einige Studenten, die es gewohnt sind, Code synchron zu schreiben, sehr verwirrt. Natürlich wurden im In- und Ausland einige hervorragende Synchronisationsbibliotheken bereitgestellt, wie zum Beispiel Wind.js von Lao Zhao ... Es scheint ein bisschen weit hergeholt. Tatsächlich möchten wir beim Aufruf von get letztendlich die Antwortinformationen erhalten, und der Abhörprozess wie res.on ist uns egal, weil er zu faul ist. Ich möchte nicht jedes Mal res.on('data',func) aufrufen müssen, also war das Nodegrass geboren, das ich heute vorstellen möchte.
2. Nodegrass fordert Ressourcen an, wie $.get(url,func) von Jquery
Das einfachste Beispiel:
var nodegrass = require('nodegrass'); nodegrass.get("http://www.baidu.com",function(data,status,headers){ console.log(status); console.log(headers); console.log(data); },'gbk').on('error', function(e) { console.log("Got error: " + e.message); });
Auf den ersten Blick gibt es keinen Unterschied zum offiziellen Original, es ist tatsächlich fast dasselbe =. =! Es fehlt lediglich eine Schicht von Ereignisüberwachungsrückrufen von res.on('data',func). Ob Sie es glauben oder nicht, ich fühle mich sowieso viel wohler. Der zweite Parameter ist auch eine Rückruffunktion. Die Parameterdaten sind der Inhalt des Antwortkörpers, der Status ist der Antwortstatus und die Header sind die Antwortheader. Nachdem wir den Antwortinhalt erhalten haben, können wir alle für uns interessanten Informationen aus den erhaltenen Ressourcen extrahieren. In diesem Beispiel handelt es sich natürlich nur um eine einfache gedruckte Konsole. Der dritte Parameter ist die Zeichenkodierung. Derzeit unterstützt Nodegrass intern nicht die von Ihnen angeforderte Webseitenkodierung, z. B. Baidu. Fügen Sie einfach diesen Parameter hinzu.
Was ist mit https-Anfragen? Wenn es sich um eine offizielle API handelt, müssen Sie das https-Modul einführen, aber die Request-Get-Methode ähnelt http, sodass Nodegrass sie übrigens integriert. Schauen Sie sich das Beispiel an:
var nodegrass = require('nodegrass'); nodegrass.get("https://github.com",function(data,status,headers){ console.log(status); console.log(headers); console.log(data); },'utf8').on('error', function(e) { console.log("Got error: " + e.message); });
Nodegrass erkennt anhand der URL automatisch, ob es sich um http oder https handelt. Natürlich muss es in Ihrer URL enthalten sein. Schreiben Sie nicht einfach www.baidu.com/. Erfordert http://www.baidu.com/.
Für Post-Anfragen stellt Nodegrass die Post-Methode bereit, siehe Beispiel:
var ng=require('nodegrass'); ng.post("https://api.weibo.com/oauth2/access_token",function(data,status,headers){ var accessToken = JSON.parse(data); var err = null; if(accessToken.error){ err = accessToken; } callback(err,accessToken); },headers,options,'utf8');
Das Obige ist Teil des Sina Weibo Auth2.0 Request AccessToken , das die Nodegrass-Post-Request-API „access_token“ verwendet.
Die Post-Methode bietet mehr Header-Anfrage-Header-Parameter und -Optionen – Post-Daten als die Get-Methode. Sie sind alle Arten von Objektliteralen:
var headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length':data.length }; var options = { client_id : 'id', client_secret : 'cs', grant_type : 'authorization_code', redirect_uri : 'your callback url', code: acode };
3. Nodegrass als Proxyserver verwenden? ...**
Sehen Sie sich das Beispiel an:
var ng = require('nodegrass'), http=require('http'), url=require('url'); http.createServer(function(req,res){ var pathname = url.parse(req.url).pathname; if(pathname === '/'){ ng.get('http://www.cnblogs.com/',function(data){ res.writeHeader(200,{'Content-Type':'text/html;charset=utf-8'}); res.write(data+"\n"); res.end(); },'utf8'); } }).listen(8088); console.log('server listening 8088...');
So einfach ist das bei Proxy-Servern Viel komplizierter ist das nicht, aber zumindest wenn Sie auf den lokalen Port 8088 zugreifen, sehen Sie die Blog-Park-Seite?
Open-Source-Adresse von Nodegrass: https://github.com/scottkiss/nodegrass
Verwandte Empfehlungen:
Node.js Entwicklungsinformations-Crawler Prozesscode-Freigabe
NodeJS Encyclopedia Crawler-Beispiel-Tutorial
Verwandte Probleme bei der Lösung von Crawler-Problemen
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Webanforderungsmoduls des Node.js-Crawlers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!