Vorbereitung
Erstellen eines ProjektsNachdem die Vorbereitungen abgeschlossen sind, beginnen wir mit der Erstellung des Projekts.
Nachrichten-Crawler-Code der Fakultät für Informatik der Universität WuhanNachfolgend finden Sie den Crawler-Code für die Nachrichten der School of Computer Science der Wuhan University. Kopieren Sie ihn in die erstellte JS-Datei und speichern Sie ihn. var http = erforderlich('http'); var fs = erfordern('fs'); var cheerio = erforderlich('cheerio'); var Anfrage = erforderlich('Anfrage'); var i = 0; //Ursprüngliche URL var url = "http://cs.whu.edu.cn/a/xinwendongtaifabu/2018/0428/7053.html"; function fetchPage(x) { //Kapselt eine Ebene der function startRequest(x); } Funktion startRequest(x) { //Verwenden Sie das http-Modul, um eine Get-Anfrage an den Server zu initiieren http.get(x, function (res) { var html = ''; //Wird verwendet, um den gesamten HTML-Inhalt der angeforderten Webseite zu speichern var titles = []; res.setEncoding('utf-8'); //Verhindere verstümmelte chinesische Schriftzeichen //Achte auf Datenereignisse und nehme jeweils ein Datenstück auf res.on('data', function (chunk) { html += Block; }); // Auf das Endereignis warten. Wenn das HTML des gesamten Webseiteninhalts abgerufen wurde, führen Sie die Rückruffunktion res.on('end', function () { aus. var $ = cheerio.load(html); //Verwende das Cheerio-Modul, um HTML zu analysieren var news_item = { //Titel des Artikels abrufen: $('div#container dt').text().trim(), i: i = i + 1, }; console.log(news_item); //Nachrichteninformationen drucken var news_title = $('div#container dt').text().trim(); savedContent($,news_title); //Speichern Sie den Inhalt und den Titel jedes Artikels savedImg($,news_title); //Speichern Sie das Bild und den Titel jedes Artikels //URL des nächsten Artikels var nextLink="http://cs.whu.edu.cn" + $("dd.Paging a").attr('href'); str1 = nextLink.split('-'); //Entferne die chinesischen Zeichen nach der URL str = encodeURI(str1[0]); //Dies ist eines der Highlights. Durch die Steuerung von I können Sie steuern, wie viele Artikel gecrawlt werden sollen. Die Wuhan University hat nur 8 Artikel, daher ist sie auf 8 eingestellt wenn (i <= 8) { fetchPage(str); } }); }).on('Fehler', Funktion (err) { console.log(fehler); }); } //Die Funktion dient zum lokalen Speichern der gecrawlten Nachrichteninhaltsressourcen function savedContent($, news_title) { $('dd.info').each(Funktion (Index, Element) { var x = $(dieser).text(); var y = x.substring(0, 2).trim(); wenn (y == '') { x = x + '\n'; //Fügen Sie den Nachrichtentextinhalt Stück für Stück dem /data-Ordner hinzu und benennen Sie die Datei mit dem Titel der Nachricht fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function (err) { wenn (Fehler) { console.log(fehler); } }); } }) } //Die Funktion dient zum lokalen Speichern der gecrawlten Bildressourcen function savedImg($,news_title) { $('dd.info img').each(Funktion (Index, Element) { var img_title = $(this).parent().next().text().trim(); //Titel des Bildes abrufen if(img_title.length>35||img_title==""){ img_title="Null"; } var Bilddateiname = Bildtitel + '.jpg'; var img_src = 'http://cs.whu.edu.cn' + $(this).attr('src'); // URL des Bildes abrufen //Verwenden Sie das Anforderungsmodul, um eine Anforderung an den Server zum Abrufen von Bildressourcen zu initiieren request.head(img_src,function(err,res,body){ wenn(fehler){ console.log(fehler); } }); request(img_src).pipe(fs.createWriteStream('./image/'+news_title + '---' + img_filename)); //Schreibe das Bild per Streaming in das lokale /image-Verzeichnis und verwende den Titel der Nachricht und den Titel des Bildes als Namen des Bildes. }) } fetchPage(url); //Das Hauptprogramm wird gestartet Jetzt kommt der spannende Moment. Führen Sie im aktuellen Ordner die erstellte js-Datei aus. Meine ist beispielsweise news.js.
Textquellen: Bildquellen: Caoliu Technology Forum Crawler Nachdem ich die Nachrichten der Wuhan-Universität durchsucht hatte, war ich nicht zufrieden und versuchte daher, das technische Diskussionsforum von Caoliu zu durchsuchen (natürlich kann ich auch einige Dinge crawlen, die Sie verstehen). Es sind einige Probleme aufgetreten. var url = { Hostname: 'cl.5fy.xyz', Pfad: '/thread0806.php?fid=7', Überschriften: { 'Inhaltstyp': 'text/html', //Ohne dieses Feld können Sie nicht darauf zugreifen 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36', }}; Zweitens unterstützt nodejs nur das Crawlen von Websites mit der Zeichenkodierung UTF-8. Sie müssen daher zusätzliche Pakete installieren, um die Kodierung zu konvertieren. Ändern Sie daher den Code wie folgt /* * @Autor: Benutzer * @Datum: 28.04.2018 19:34:50 * @Zuletzt geändert von: Benutzer * @Letzte Änderungszeit: 2018-04-30 21:35:26 */ var http = erforderlich('http'); var fs = erfordern('fs'); var cheerio = erforderlich('cheerio'); var Anfrage = erforderlich('Anfrage'); var iconv = erforderlich('iconv-lite'); var i = 0; //Wird verwendet, um zu bestimmen, ob gespeichert oder darauf zugegriffen werden soll. var temp=0; let startPage=3;//Ab welcher Seite mit dem Crawlen begonnen werden soll let page=startPage; let endPage=5;//Welche Seite soll gecrawlt werden? let searchText='';//Gecrawlte Schlüsselwörter, alle werden standardmäßig gecrawlt, entsprechend Ihren Anforderungen //Ursprüngliche URL var url = { Hostname: '1024liuyouba.tk', Pfad: '/thread0806.php?fid=16'+'&search=&page='+startPage, Überschriften: { 'Inhaltstyp': 'text/html', //Ohne dieses Feld können Sie nicht auf 'User-Agent' zugreifen: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36', }}; //Speichern Sie die URL der Homepage urlList=[]; //Kapselt eine Funktionsebene function fetchPage(x) { setzeTimeout(Funktion(){ startRequest(x); },5000) } //Speichern Sie zuerst die URL der Schnittstelle, auf die zugegriffen werden soll Funktion getUrl(x){ Temperatur++; http.get(x,function(res){ var html = ''; res.setEncoding('binär'); res.on('Daten', Funktion (Block) { html += Block; }); res.on('Ende', Funktion () { var buf = neuer Puffer (html, „binär“); var str=iconv.decode(buf,'GBK'); var $ = cheerio.load(str); //Verwende das Cheerio-Modul, um HTML zu analysieren $('tr.tr3 td.tal h3 a').jeweils(Funktion(){ var Suche = $(this).text(); wenn(Suche.indexOf(Suchtext)>=0){ var nextLink="http://cl.5fy.xyz/" + $(this).attr('href'); str1 = nextLink.split('-'); //Entferne die chinesischen Zeichen nach der URL str = encodeURI(str1[0]); urlList.push(str); } }) Seite++; wenn(Seite<Seitenende){ //Speichern Sie die URL der nächsten Seite x.path='/thread0806.php?fid=16'+'&search=&page='+page, getUrl(x); }sonst wenn(urlList.length!=0){ fetchPage(urlList.shift()); }anders{ console.log('Keine Schlüsselwörter gefunden!'); } }) }).on('Fehler', Funktion (err) { console.log(fehler); }); } Funktion startRequest(x) { wenn(temp===0){ getUrl(x); } anders{ //Verwenden Sie das http-Modul, um eine Get-Anfrage an den Server zu initiieren http.get(x, function (res) { var html = ''; //Wird verwendet, um den gesamten HTML-Inhalt der angeforderten Webseite zu speichern res.setEncoding('binary'); var Titel = []; //Auf das Datenereignis hören und jeweils einen Datenblock abrufen res.on('data', function (chunk) { html += Block; }); // Auf das Endereignis warten. Wenn das HTML des gesamten Webseiteninhalts abgerufen wurde, führen Sie die Rückruffunktion res.on('end', function () { aus. var buf = neuer Puffer (html, „binär“); var str=iconv.decode(buf,'GBK'); var $ = cheerio.load(str); //Verwende das Cheerio-Modul, um HTML zu analysieren var news_item = { //Titel des Artikels abrufen: $('h4').text().trim(), //i wird verwendet, um zu bestimmen, wie viele Artikel i erhalten wurden: i = i + 1, }; console.log(news_item); //Informationen drucken var news_title = $('h4').text().trim(); savedContent($,news_title); //Speichern Sie den Inhalt und den Titel jedes Artikels savedImg($,news_title); //Speichern Sie das Bild und den Titel jedes Artikels //Wenn der Zugriff nicht abgeschlossen ist, fahre mit dem Zugriff fort, if (urlList.length!=0) { fetchPage(urlList.shift()); } }); }).on('Fehler', Funktion (err) { console.log(fehler); }); } } //Die Funktion dient zum lokalen Speichern der gecrawlten Textinhaltsressourcen function savedContent($, news_title) { $("div.t2[style].tpc_content.do_not_catch").jeweils(Funktion (Index, Element) { var x = $(dieser).text(); x = x + '\n'; //Fügen Sie den Nachrichtentextinhalt Stück für Stück dem /data-Ordner hinzu und benennen Sie die Datei mit dem Titel der Nachricht fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function (err) { wenn (Fehler) { console.log(fehler); } }); }) } //Die Funktion dient zum lokalen Speichern der gecrawlten Bildressourcen function savedImg($,news_title) { //Erstelle einen Ordner fs.mkdir('./image/'+news_title, function (err) { wenn(err){console.log(err)} }); $('.tpc_content.do_not_catch input[src]').jeder(Funktion (Index, Element) { var img_title = index; //Jedem Bild eine Nummer hinzufügen var img_filename = img_title + '.jpg'; var img_src = $(this).attr('src'); // URL des Bildes abrufen //Verwenden Sie das Anforderungsmodul, um eine Anforderung an den Server zum Abrufen von Bildressourcen zu initiieren request.head(img_src,function(err,res,body){ wenn(fehler){ console.log(fehler); } }); setzeTimeout(Funktion(){ Anfrage({uri: img_src, Kodierung: 'binär'}, Funktion (Fehler, Antwort, Text) { wenn (!Fehler && response.statusCode == 200) { fs.writeFile('./image/'+news_title+'/' + img_filename, body, 'binary', Funktion (Fehler) { wenn(err){console.log(err)} }); } }) }); }) } fetchPage(url); //Das Hauptprogramm wird gestartet Ergebnisse: Dies ist das Ende dieses Artikels zum Erstellen eines einfachen Crawlers mit node.js. Weitere Informationen zum Erstellen eines einfachen Crawlers mit node.js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: SSM implementiert die Chiffretext-Anmeldefunktion für das Kennwort des MySQL-Datenbankkontos
>>: Detaillierte Erläuterung der Methode zur Optimierung der MySQL-Datenbanktabellenstruktur
In diesem Artikel wird der NAT-Konfigurationsproz...
Inhaltsverzeichnis Schritt 1: Melden Sie sich als...
Ich bin auf ein sehr ungewöhnliches Problem mit ve...
1 Was ist MVCC Der vollständige Name von MVCC lau...
Dieser Artikel konzentriert sich hauptsächlich au...
Ich nenne diese Art von Fehler einen typischen „H...
1. Umwelt: MySQL-5.0.41-win32 Windows XP Professi...
1. Lassen Sie uns zunächst eine allgemeine Einfüh...
Inhaltsverzeichnis Vorwort 1. Einfügen von ignore...
<Vorlage> <div Klasse="App-Containe...
Anfänger können HTML lernen, indem sie einige HTM...
Für viele HTML-Neulinge ist die Tabelle <table...
Inline-Format <colgroup>…</colgroup> ...
Die Testumgebung dieses Experiments: Windows 10+c...
1. Erstellen Sie ein leeres Verzeichnis $ cd /hom...