Lassen Sie uns heute das Crawler-Tutorial von alsotang lernen und dann dem einfachen Crawlen von CNode folgen.
Projekt craelr-demo erstellen
Wir erstellen zunächst ein Express-Projekt und löschen dann den gesamten Inhalt der Datei app.js, da wir den Inhalt vorerst nicht im Web anzeigen müssen. Natürlich können wir auch direkt npm install express
in einem leeren Ordner die von uns benötigten Express-Funktionen nutzen.
Gezielte Website-Analyse
Wie im Bild gezeigt, ist dies ein Teil des div-Tags auf der CNode-Homepage. Wir verwenden diese Reihe von IDs und Klassen, um die benötigten Informationen zu finden.
Verwenden Sie Superagent, um Quelldaten zu erhalten
Superagent ist eine HTTP-Bibliothek, die von der Ajax-API verwendet wird. Seine Verwendung ähnelt der von jQuery. Wir initiieren darüber eine Get-Anfrage und geben das Ergebnis in der Callback-Funktion aus.
Sein Res-Ergebnis ist ein Objekt, das Ziel-URL-Informationen enthält, und der Website-Inhalt besteht hauptsächlich aus seinem Text (String).
Verwenden Sie Cheerio zum Parsen
cheerio fungiert als serverseitige jQuery-Funktion. Zuerst verwenden wir .load(), um HTML zu laden, und filtern dann Elemente über den CSS-Selektor.
Das Ergebnis ist ein Objekt. Rufen Sie die Funktion .each(function(index, element))
auf, um jedes Objekt zu durchlaufen und HTML-DOM-Elemente zurückzugeben.
Das Ergebnis der Ausgabe von console.log($element.attr('title'));
ist 广州 2014年12月06日 NodeParty 之 UC 场
Titel wie console.log($element.attr('href'));
werden als URLs wie /topic/545c395becbcb78265856eb2
ausgegeben. Verwenden Sie dann die Funktion url.resolve() von NodeJS1, um die vollständige URL zu vervollständigen.
Verwenden Sie Eventproxy, um den Inhalt jedes Themas gleichzeitig zu crawlen
Das Tutorial zeigt Beispiele für tief verschachtelte (serielle) Methoden und Zählermethoden. Eventproxy verwendet Ereignismethoden (parallele Methoden), um dieses Problem zu lösen. Wenn das gesamte Crawling abgeschlossen ist, empfängt eventproxy die Ereignisnachricht und ruft automatisch die Verarbeitungsfunktion für Sie auf.
Die Ergebnisse sind wie folgt
Erweiterte Übung (Challenge)
Benutzernamen und Punkte per Nachricht erhalten
Suchen Sie den Klassennamen des Benutzers, der im Quellcode der Artikelseite einen Kommentar abgegeben hat. Der Klassenname lautet „reply_author“. Wie Sie dem ersten Element von console.log $('.reply_author').get(0)
entnehmen können, ist alles, was wir brauchen, hier.
Lassen Sie uns zunächst einen Artikel crawlen und alles, was wir brauchen, auf einmal erhalten.
Wir können Punktinformationen über https://cnodejs.org/user/username
Auf der Benutzerinformationsseite $('.big').text().trim()
finden Sie die Punkteinformationen.
Verwenden Sie die Funktion .get(0) von Cheerio, um das erste Element abzurufen.
Dies ist nur eine Aufnahme eines einzelnen Artikels, es gibt noch 40, die geändert werden müssen.