Maison  >  Article  >  interface Web  >  Un robot d'exploration puissant basé sur Node.js qui peut publier directement les articles_node.js analysés

Un robot d'exploration puissant basé sur Node.js qui peut publier directement les articles_node.js analysés

WBOY
WBOYoriginal
2016-05-16 15:20:421684parcourir

1. Configuration de l'environnement

1) Construisez un serveur, n'importe quel Linux fera l'affaire, j'utilise CentOS 6.5

2) Installez une base de données MySQL, soit 5.5, soit 5.6. Pour éviter les problèmes, vous pouvez l'installer directement avec lnmp ou lamp. Vous pouvez également lire les logs directement dans le navigateur plus tard ;

3) Installez d'abord un environnement node.js. J'utilise 0.12.7. Je n'ai pas essayé les versions ultérieures

.

4) Exécutez npm -g install Forever pour installer définitivement afin que le robot puisse s'exécuter en arrière-plan

 ;

5) Organiser tout le code localement (intégration = git clone

) ;

6) Exécutez npm install dans le répertoire du projet pour installer les bibliothèques dépendantes

7) Créez deux dossiers vides, json et avatar, dans le répertoire du projet

8) Créez une base de données mysql vide et un utilisateur avec toutes les autorisations, exécutez successivement setup.sql et startusers.sql dans le code, créez la structure de la base de données et importez l'utilisateur initial

 ;

9) Modifiez config.js, les éléments de configuration marqués (obligatoires) doivent être remplis ou modifiés, et les éléments restants peuvent rester inchangés pour le moment :


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";//接收通知邮件地址(必须)
Enregistrez et passez à l'étape suivante.

2. Utilisateurs du robot

Le principe du robot est en fait de simuler un véritable utilisateur de Zhihu cliquant sur le site Web et collectant des données, nous avons donc besoin d'un véritable utilisateur de Zhihu. Pour les tests, vous pouvez utiliser votre propre compte, mais pour des raisons à long terme, il est préférable d'enregistrer un compte spécial. Un seul suffit, et le robot d'exploration actuel n'en prend en charge qu'un. Notre processus de simulation n'a pas besoin de se connecter depuis la page d'accueil comme un vrai utilisateur, mais emprunte directement la valeur du cookie :

Après vous être inscrit, activé et connecté, accédez à votre page d'accueil, utilisez n'importe quel navigateur avec mode développeur ou plug-in de cookie et ouvrez vos propres cookies dans Zhihu. Il peut y avoir une liste très complexe, mais nous n'en avons besoin que d'une partie, à savoir "z_c0". Copiez la partie z_c0 de votre propre cookie, en laissant de côté les signes égal, les guillemets et les points-virgules. Le format final ressemble à ceci :

.

z_c0="LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb";
Insérer une ligne d'enregistrements dans la table cookies de la base de données mysql, où les valeurs de chaque champ sont :


  • e-mail : l'e-mail de connexion de l'utilisateur du robot
  • mot de passe : le mot de passe de l'utilisateur du robot
  • nom : nom d'utilisateur du robot
  • hash : le hachage de l'utilisateur du robot (un identifiant unique qui ne peut pas être modifié par chaque utilisateur. En fait, il n'est pas utilisé ici et peut être laissé vide temporairement)
  • cookie : le cookie que vous venez de copier
Ensuite, il peut officiellement commencer à fonctionner. Si le cookie expire ou si l'utilisateur est bloqué, modifiez simplement le champ du cookie dans cette ligne d'enregistrements.

3. Fonctionnement

Il est recommandé d'utiliser Forever pour exécuter, ce qui facilite non seulement l'exécution et la journalisation en arrière-plan, mais également le redémarrage automatique après un crash. Exemple :


forever -l /var/www/log.txt index.js
L'adresse après -l est l'endroit où le journal est enregistré. S'il est placé dans le répertoire du serveur Web, il est accessible dans le navigateur via

http://www.xxx.com/log.txt<.> Consultez directement le journal. Ajoutez des paramètres (séparés par des espaces) après index.js pour exécuter différentes instructions du robot : 1. -i s'exécute immédiatement Si ce paramètre n'est pas ajouté, il sera exécuté par défaut à la prochaine heure spécifiée, par exemple à 0h05 du matin ; 2. -ng ignore la phase de récupération de nouveaux utilisateurs, c'est-à-dire getnewuser
 ; 3. -ns ignore la phase d'instantané, c'est-à-dire l'instantané de l'utilisateur
; 4. -nf ignore l'étape de génération du fichier de données, c'est-à-dire saveviewfile
; 5. -db affiche les journaux de débogage.
Les fonctions de chaque étape sont présentées dans la section suivante. Afin de faciliter l'opération, vous pouvez écrire cette ligne de commande sous forme de script sh, par exemple :


Veuillez remplacer le chemin spécifique par le vôtre. De cette façon, vous pouvez démarrer le robot d'exploration en ajoutant des paramètres à ./zhihuspider.sh : Par exemple, ./zhihuspider.sh -i -ng -nf démarre la tâche immédiatement et ignore les étapes d'enregistrement du nouvel utilisateur et du fichier. La méthode pour arrêter le robot est "every stopall" (ou arrêter le numéro de série).

4. Aperçu des principes

Vérifiez que le fichier d'entrée du robot d'exploration Zhihu est index.js. Il exécute des tâches de robot d'exploration à des heures spécifiées chaque jour en boucle. Il y a trois tâches qui sont exécutées séquentiellement chaque jour, à savoir :

1) getnewuser.js : Capturez les informations sur les nouveaux utilisateurs en comparant la liste des utilisateurs abonnés dans la bibliothèque actuelle. En vous appuyant sur ce mécanisme, vous pouvez automatiquement répertorier les utilisateurs dignes de ce nom. Zhihu De nouvelles personnes sont ajoutées à la bibliothèque

2) usersnapshot.js : Boucles pour capturer les informations utilisateur et les listes de réponses dans la bibliothèque actuelle, et les enregistrer sous forme d'instantanés quotidiens.

3) saveviewfile.js : Générez une liste d'analyse des utilisateurs basée sur le contenu du dernier instantané, filtrez les réponses d'essence d'hier, récentes et historiques et publiez-les sur le Site Web "Kanzhihu".

Une fois les trois tâches ci-dessus terminées, le fil de discussion principal actualisera la page d'accueil de Zhihu toutes les quelques minutes pour vérifier si le cookie actuel est toujours valide. S'il n'est pas valide (en passant à la page de non-connexion), un e-mail de notification sera envoyé. être envoyé à la boîte aux lettres spécifiée, vous rappelle de modifier les cookies à temps. La méthode de modification des cookies est la même que lors de l'initialisation. Il vous suffit de vous connecter manuellement une fois, puis de supprimer la valeur du cookie. Si vous êtes intéressé par l'implémentation spécifique du code, vous pouvez lire attentivement les commentaires à l'intérieur, ajuster certaines configurations ou même essayer de reconstruire l'intégralité du robot vous-même.

Conseils

1) Le principe de getnewuser est de spécifier la capture en comparant le nombre de suivis des utilisateurs dans les instantanés des deux jours avant et après, elle doit donc avoir au moins deux instantanés avant de pouvoir être démarrée. est exécuté avant, il sera automatiquement ignoré.

2) La moitié de l'instantané peut être restaurée. Si le programme plante à cause d'une erreur, utilisez toujours stop pour l'arrêter, puis ajoutez les paramètres -i -ng pour l'exécuter immédiatement et ignorer la nouvelle phase utilisateur, afin de pouvoir continuer à partir de l'instantané à moitié capturé.

3) N'augmentez pas facilement le nombre de (pseudo) threads lors de la prise d'instantanés, c'est-à-dire l'attribut maxthreadcount dans les utilisateursnapshots. Trop de threads provoqueront des erreurs 429 et la grande quantité de données capturées risque de ne pas être écrite dans la base de données à temps, provoquant un débordement de mémoire. Par conséquent, sauf si votre base de données est sur un SSD, ne dépassez pas 10 threads.

4) Le travail de sauvegarde du fichier de vue pour générer les résultats d'analyse nécessite des instantanés d'au moins 7 jours. Si le contenu de l'instantané date de moins de 7 jours, une erreur sera signalée et ignorée. Le travail d'analyse précédent peut être effectué en interrogeant manuellement la base de données.

5) Considérant que la plupart des gens n'ont pas besoin de copier un "Kanzhihu", l'entrée de la fonction de publication automatique d'articles WordPress a été commentée. Si vous avez configuré WordPress, pensez à activer xmlrpc, puis configurez un utilisateur spécifiquement pour la publication d'articles, configurez les paramètres correspondants dans config.js et décommentez le code correspondant dans saveviewfile.

6) Depuis que Zhihu a mis en place un traitement anti-sangsue pour les avatars, nous avons également obtenu les avatars lors de la capture des informations utilisateur et les avons enregistrés localement lors de la publication d'articles, nous avons utilisé l'adresse locale de l'avatar. Vous devez pointer le chemin URL du serveur http vers le dossier où l'avatar est enregistré, ou placer le dossier où l'avatar est enregistré directement dans le répertoire du site Web.

7) Le code peut ne pas être facile à lire. En plus de la structure de rappel déroutante de node.js lui-même, cela s'explique en partie par le fait que lorsque j'ai écrit le programme pour la première fois, je venais de commencer à entrer en contact avec node.js. Il y avait de nombreux endroits inconnus qui provoquaient la structure. déroutant et je n'ai pas eu le temps de le corriger ; une autre partie était qu'après plusieurs fois, de nombreuses conditions de jugement laides et des règles de nouvelle tentative s'accumulent dans le patchwork. Si elles sont toutes supprimées, le volume de code peut être réduit des deux tiers. Mais il n’y a aucun moyen de contourner ce problème afin d’assurer le fonctionnement stable d’un système, ceux-ci doivent être ajoutés.

8) Ce code source de robot est basé sur le protocole WTFPL et n'impose aucune restriction de modification et de publication.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn