Heim >Web-Frontend >js-Tutorial >So verwenden Sie den Node.js-Crawler zum Implementieren von Webseitenanforderungen
In diesem Artikel wird hauptsächlich das Webanforderungsmodul des Node.js-Crawlers vorgestellt. Jetzt teile ich es mit Ihnen und gebe es als Referenz.
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, da einige Methoden dies getan haben wurden aktualisiert, die Beispiele in diesem Artikel sind nicht mehr geeignet. Weitere Informationen finden Sie in den Beispielen 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 Unter diesen stehen zwei Methoden für HTTP-Anfragen zur Verfügung: http.get(options, callback) und http.request(options, callback) Sie werden Wenn Sie sich die Methode ansehen, erfahren Sie, dass 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 und Antworttextinhalt erhalten. 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 Überwachungsprozess 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 der Nodegrass geboren, den ich heute vorstellen möchte.
2. Nodegrass fordert Ressourcen an, wie $.get(url,func) von JqueryDas 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); });
咋一Sehen Sie, das ist es Es unterscheidet sich nicht vom 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. Sie können es natürlich nicht nur www.baidu.com/ schreiben ://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 von Sina Weibo Auth2.0, das accessToken anfordert, das die Nodegrass-Post-Request-API „access_token“ verwendet.
Die Post-Methode bietet mehr Header-Anfrage-Header-Parameter und -Optionen 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 Verwenden von Nodegrass Proxyserver? ……**
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 natürlich nicht, aber zumindest wenn Wenn Sie auf den lokalen Port 8088 zugreifen, sehen Sie: Ist es die Seite des Blog Park?
Die Open-Source-Adresse von Nodegrass: https://github.com/scottkiss/nodegrass
Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird .
Verwandte Artikel:
Rekursive und nicht rekursive JavaScript-DurchquerungSo verwenden Sie die Upload-Upload-Komponente von element-ui in vueSo implementieren Sie Aufrufe zwischen Methoden in VueDas obige ist der detaillierte Inhalt vonSo verwenden Sie den Node.js-Crawler zum Implementieren von Webseitenanforderungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!