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
Die Standarddatenbank von CentOS7 ist MariaDB, ab...
Inhaltsverzeichnis Sonderzeichen in URLs Escapeze...
Die MySQL-Funktionen DATE_ADD(date,INTERVAL expr ...
Mysql unterstützt 3 Arten von Sperrstrukturen Spe...
Als ich kürzlich MySQL in Docker installierte, st...
Es gibt zwei Arten von MySQL-Installationsdateien...
Bei der Installation von FileZilla Server auf dem...
Dieser Artikel beschreibt hauptsächlich, wie die ...
Registerkartenleiste: Klicken Sie auf verschieden...
Ergebnisse erzielen Implementierungscode <h1&g...
Bevor wir JSX zum Erstellen eines Komponentensyst...
CSS hat zwei Pseudoklassen, die nicht häufig verw...
Da Benutzer immer datenschutzbewusster werden und...
Über wen Zeigt die am System angemeldeten Benutze...
[LeetCode] 176. Zweithöchstes Gehalt Schreiben Si...