


Ein leistungsstarker Crawler basierend auf Node.js, der gecrawlte Articles_node.js direkt veröffentlichen kann
1. Umgebungskonfiguration
1) Erstellen Sie einen Server, jedes Linux reicht aus, ich verwende CentOS 6.5;
2) Installieren Sie eine MySQL-Datenbank, entweder 5.5 oder 5.6. Um Ärger zu vermeiden, können Sie sie direkt mit lnmp oder Lamp installieren. Sie können die Protokolle auch später direkt im Browser lesen3) Installieren Sie zuerst eine node.js-Umgebung. Ich habe keine späteren Versionen ausprobiert
4) Führen Sie npm -g install forever aus, um die Installation für immer durchzuführen, damit der Crawler im Hintergrund laufen kann5) Organisieren Sie den gesamten Code lokal (Integration = Git-Klon);
6) Führen Sie npm install im Projektverzeichnis aus, um abhängige Bibliotheken zu installieren
7) Erstellen Sie zwei leere Ordner, json und avatar, im Projektverzeichnis
8) Erstellen Sie eine leere MySQL-Datenbank und einen Benutzer mit vollständigen Berechtigungen, führen Sie setup.sql und startusers.sql nacheinander im Code aus, erstellen Sie die Datenbankstruktur und importieren Sie den anfänglichen Seed-Benutzer
9) Bearbeiten Sie config.js. Die mit (erforderlich) markierten Konfigurationselemente müssen ausgefüllt oder geändert werden, und die übrigen Elemente können vorerst unverändert bleiben:
exports.jsonPath = "./json/";//生成json文件的路径 exports.avatarPath = "./avatar/";//保存头像文件的路径 exports.dbconfig = { host: 'localhost',//数据库服务器(必须) user: 'dbuser',//数据库用户名(必须) password: 'dbpassword',//数据库密码(必须) database: 'dbname',//数据库名(必须) port: 3306,//数据库服务器端口 poolSize: 20, acquireTimeout: 30000 }; exports.urlpre = "http://www.jb51.net/";//脚本网址 exports.urlzhuanlanpre = "http://www.jb51.net/list/index_96.htm/";//脚本网址 exports.WPurl = "www.xxx.com";//要发布文章的wordpress网站地址 exports.WPusername = "publishuser";//发布文章的用户名 exports.WPpassword = "publishpassword";//发布文章用户的密码 exports.WPurlavatarpre = "http://www.xxx.com/avatar/";//发布文章中替代原始头像的url地址 exports.mailservice = "QQ";//邮件通知服务类型,也可以用Gmail,前提是你访问得了Gmail(必须) exports.mailuser = "12345@qq.com";//邮箱用户名(必须) exports.mailpass = "qqpassword";//邮箱密码(必须) exports.mailfrom = "12345@qq.com";//发送邮件地址(必须,一般与用户名所属邮箱一致) exports.mailto = "12345@qq.com";//接收通知邮件地址(必须)
Das Prinzip des Crawlers besteht eigentlich darin, einen echten Zhihu-Benutzer zu simulieren, der auf der Website herumklickt und Daten sammelt. Wir benötigen also einen echten Zhihu-Benutzer. Zum Testen können Sie Ihr eigenes Konto verwenden. Aus langfristigen Gründen ist es jedoch besser, ein spezielles Konto zu registrieren. Eins reicht aus, und der aktuelle Crawler unterstützt nur eines. Unser Simulationsprozess muss sich nicht wie ein echter Benutzer von der Homepage aus anmelden, sondern leiht sich direkt den Cookie-Wert aus: Gehen Sie nach der Registrierung, Aktivierung und Anmeldung auf Ihre Homepage, verwenden Sie einen beliebigen Browser mit Entwicklermodus oder Cookie-Plugin und öffnen Sie Ihre eigenen Cookies in Zhihu. Es mag eine sehr komplexe Liste sein, aber wir brauchen nur einen Teil davon, nämlich „z_c0“. Kopieren Sie den z_c0-Teil Ihres eigenen Cookies und lassen Sie die Gleichheitszeichen, Anführungszeichen und Semikolons weg. Das endgültige Format sieht ungefähr so aus:
z_c0="LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb";
- Passwort: das Passwort des Crawler-Benutzers
- Name: Crawler-Benutzername
- Hash: der Hash des Crawler-Benutzers (eine eindeutige Kennung, die nicht von jedem Benutzer geändert werden kann. Tatsächlich wird er hier nicht verwendet und kann vorübergehend leer gelassen werden)
- Cookie: das Cookie, das Sie gerade kopiert haben
-
Dann kann es offiziell losgehen. Wenn das Cookie abläuft oder der Benutzer blockiert ist, ändern Sie einfach das Cookie-Feld in dieser Datensatzzeile.
Es wird empfohlen, für die Ausführung „Forever“ zu verwenden, was nicht nur die Ausführung und Protokollierung im Hintergrund erleichtert, sondern auch nach einem Absturz automatisch neu startet. Beispiel:
forever -l /var/www/log.txt index.js1. -i wird sofort ausgeführt, wenn dieser Parameter nicht hinzugefügt wird, wird er standardmäßig zum nächsten angegebenen Zeitpunkt ausgeführt, z. B. jeden Morgen um 0:05 Uhr 2. -ng überspringt die Phase des Abrufens neuer Benutzer, also getnewuser; 3. -ns überspringt die Snapshot-Phase, also den Usersnapshot; 4. -nf überspringt die Phase der Datendateigenerierung, d. h. saveviewfile
Die Funktionen jeder Stufe werden im nächsten Abschnitt vorgestellt. Um die Bedienung zu erleichtern, können Sie diese Befehlszeile als SH-Skript schreiben, zum Beispiel:
Bitte ersetzen Sie den spezifischen Pfad durch Ihren eigenen. Auf diese Weise können Sie den Crawler starten, indem Sie Parameter zu ./zhihuspider.sh hinzufügen: Beispielsweise startet ./zhihuspider.sh -i -ng -nf die Aufgabe sofort und überspringt die Phasen des Speicherns neuer Benutzer und Dateien. Die Methode zum Stoppen des Crawlers ist „forever stopall“ (oder „Stopp-Seriennummer“).
4. Übersicht der Grundsätze
Stellen Sie sicher, dass die Eintragsdatei für den Zhihu-Crawler index.js ist. Es führt Crawler-Aufgaben täglich zu bestimmten Zeiten in einer Schleife aus. Es gibt drei Aufgaben, die jeden Tag nacheinander ausgeführt werden, nämlich:
1) getnewuser.js: Erfassen Sie neue Benutzerinformationen, indem Sie die Liste der Benutzer-Follower in der aktuellen Bibliothek vergleichen und automatisch die würdigen Benutzer auflisten Zhihu Neue Leute werden zur Bibliothek hinzugefügt
2) usersnapshot.js: Schleifen zum Erfassen von Benutzerinformationen und Antwortlisten in der aktuellen Bibliothek und zum Speichern dieser in Form von täglichen Snapshots.
3) saveviewfile.js: Generieren Sie eine Benutzeranalyseliste basierend auf dem Inhalt des neuesten Snapshots, filtern Sie gestrige, aktuelle und historische Essenzantworten heraus und veröffentlichen Sie sie im „Kanzhihu“-Website.
Nachdem die oben genannten drei Aufgaben abgeschlossen sind, aktualisiert der Hauptthread alle paar Minuten die Zhihu-Homepage, um zu überprüfen, ob das aktuelle Cookie noch gültig ist. Wenn es ungültig ist (Sprung zur Nicht-Anmeldeseite), wird eine Benachrichtigungs-E-Mail gesendet werden an das angegebene Postfach gesendet und erinnern Sie daran, Cookies rechtzeitig zu ändern. Die Methode zum Ändern von Cookies ist die gleiche wie bei der Initialisierung. Sie müssen sich nur einmal manuell anmelden und dann den Cookie-Wert entfernen. Wenn Sie an der spezifischen Code-Implementierung interessiert sind, können Sie die darin enthaltenen Kommentare sorgfältig lesen, einige Konfigurationen anpassen oder sogar versuchen, den gesamten Crawler selbst zu rekonstruieren.
Tipps
1) Das Prinzip von getnewuser besteht darin, die Erfassung durch den Vergleich der Anzahl der Benutzerfolgen in den Schnappschüssen der beiden Tage davor und danach festzulegen. Daher müssen mindestens zwei Schnappschüsse vorhanden sein, bevor sie gestartet werden können Wird zuvor ausgeführt, wird es automatisch übersprungen.
2) Die Hälfte des Snapshots kann wiederhergestellt werden. Wenn das Programm aufgrund eines Fehlers abstürzt, stoppen Sie es mit „Forever Stop“ und fügen Sie dann die Parameter -i -ng hinzu, um es sofort auszuführen und die neue Benutzerphase zu überspringen, sodass Sie mit dem halb erfassten Snapshot fortfahren können.
3) Erhöhen Sie nicht einfach die Anzahl der (Pseudo-)Threads, wenn Sie Snapshots erstellen, d. h. das Attribut „maxthreadcount“ in „usersnapshots“. Zu viele Threads verursachen 429-Fehler und die große erfasste Datenmenge wird möglicherweise nicht rechtzeitig in die Datenbank geschrieben, was zu einem Speicherüberlauf führt. Daher sollten Sie 10 Threads nicht überschreiten, es sei denn, Ihre Datenbank befindet sich auf einer SSD.
4) Das Speichern der Ansichtsdatei zum Generieren von Analyseergebnissen erfordert Snapshots von mindestens den letzten 7 Tagen. Wenn der Snapshot-Inhalt weniger als 7 Tage alt ist, wird ein Fehler gemeldet und übersprungen. Vorherige Analysearbeiten können durch manuelle Abfragen der Datenbank durchgeführt werden.
5) Da die meisten Leute kein „Kanzhihu“ kopieren müssen, wurde der Eintrag zur Funktion zur automatischen Veröffentlichung von WordPress-Artikeln auskommentiert. Wenn Sie WordPress eingerichtet haben, denken Sie daran, xmlrpc zu aktivieren, richten Sie dann einen Benutzer speziell für die Veröffentlichung von Artikeln ein, konfigurieren Sie die entsprechenden Parameter in config.js und kommentieren Sie den entsprechenden Code in saveviewfile aus.
6) Da Zhihu eine Anti-Leeching-Behandlung für Avatare implementiert hat, haben wir bei der Erfassung von Benutzerinformationen auch die Avatare abgerufen und sie lokal gespeichert. Beim Veröffentlichen von Artikeln haben wir die lokale Avatar-Adresse verwendet. Sie müssen den URL-Pfad im http-Server auf den Ordner verweisen, in dem der Avatar gespeichert ist, oder den Ordner, in dem der Avatar gespeichert ist, direkt im Website-Verzeichnis platzieren.
7) Der Code ist möglicherweise nicht leicht zu lesen. Neben der verwirrenden Rückrufstruktur von node.js selbst liegt der Grund auch darin, dass ich beim ersten Schreiben des Programms gerade erst mit node.js in Berührung gekommen bin. Es gab viele unbekannte Orte, die die Struktur verursachten Es war verwirrend und ich hatte keine Zeit, es zu korrigieren. Ein weiterer Teil war, dass sich nach vielen Malen viele hässliche Beurteilungsbedingungen und Wiederholungsregeln im Patchwork angesammelt hatten. Wenn sie alle entfernt würden, könnte sich das Codevolumen um zwei Drittel reduzieren. Um den stabilen Betrieb eines Systems zu gewährleisten, führt jedoch kein Weg daran vorbei.
8) Dieser Crawler-Quellcode basiert auf dem WTFPL-Protokoll und unterliegt keinen Einschränkungen hinsichtlich Änderung und Veröffentlichung.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung