Cet article partage un Crawler de Zhihu basé sur Java pour capturer des informations de base des utilisateurs de Zhihu, basés sur HTTPClient 4.5 pour votre référence. Le contenu spécifique est le suivant
Détails:
Crawl 90W + Informations utilisateur (essentiellement tous les utilisateurs actifs sont à l'intérieur)
Idée générale:
1. Premièrement, simulez la connexion à Zhihu. Après vous être connecté avec succès, sérialisez les cookies au disque. Vous n'avez pas besoin de vous connecter à chaque fois à l'avenir (si vous ne simulez pas la connexion, vous pouvez remplir des cookies directement à partir du navigateur).
2. Créez deux pools de threads et un stockage. Un pool de threads pour explorer les pages Web est responsable de l'exécution des demandes, du renvoi du contenu de la page Web et de l'enregistrement en stockage. L'autre consiste à analyser le pool de threads de page Web, qui est responsable de la suppression du contenu de la page Web à partir du stockage et de l'analyse, en analysant les informations de l'utilisateur et en les enregistrant dans la base de données, en analysant la page d'accueil de la personne que l'utilisateur suit et en ajoutant la demande d'adresse à la rampe de threads de page Web. Continuez.
3. Concernant la déduplication de l'URL, je convertit directement le lien visité MD5 en base de données. Avant chaque visite, vérifiez si le lien existe dans la base de données.
Jusqu'à présent, les utilisateurs de 100W ont été capturés et les liens visités sont 220W +. Les utilisateurs rampés sont maintenant des utilisateurs inactifs. Les utilisateurs plus actifs auraient dû être essentiellement capturés.
Adresse du projet: https://github.com/wycm/mycrawler
Code d'implémentation:
Auteur: Wo Yan Chen SI Lien: https://www.zhihu.com/question/36909173/answer/97643000 Source: Zhihu Copyright appartient à l'auteur. Pour la réimpression commerciale, veuillez contacter l'auteur pour l'autorisation. Pour une réimpression non commerciale, veuillez indiquer la source. / ** * * @param httpclient http client * @param context http context * @return * / public boolean ligin (closablehttpclient httpclient, httpclientContext context) {String yzm = null; string liginstate = null; httpget getrequest = new Httpget ("https://www.zhihu.com/#signin"); httpclienttutil.getwebpage (httpclient, contexte, getRequest, "utf-8", false); httppost request = new Httppost ("https://www.zhihu.com/login/email"); list <nameValuepair> formarams = new ArrayList <nameValuepair> (); yzm = yzm (httpclient, context, "https://www.zhu.com/captcha.gif? CODE DE VÉRIFICATION DE COMMÉDÉRATION CODE FORMPARAMS.ADD (NOUVEAU BASICAMNAMEVALEEPAIR ("CAPTCHA", YZM)); FORMPARAMS.ADD (NOUVEAU BASICAMEVALUEEPAIR ("_ XSRF", "")); // Ce paramètre peut être utilisé sans formarams.add (New BasicNameValuePair ("Email", "Email")); FormArams.add (New BasicNameValuepair ("Mot de passe", "mot de passe")); formarams.add (new BasicNameValuepair ("Remember_me", "true")); urlencodedFormentity entity = null; try {entity = new urlencodedFormentity (FormArams, "utf-8");} catch (unpportedEncodingException a) gens JSONObject (LoginState); if (Jo.get ("r"). ToString (). Equals ("0")) {System.out.println ("Connexion avec succès"); getRequest = new httpget ("https://www.zhihu.com"); httpclEtul.getwebpage (httpclient, Getrestrel.getwebpage (httpclient, GetRestRere.getwebpage (httpclient, GetRestRere.getwebpage (httpclient, Getrestrere.getwebpage (httpclient, Getrestrere.getwebpage (httpclient, GetRestRere.getwebpage (httpclient, Getrestrel.getwebpage (httpclient, Getrestrere. "UTF-8", false); // Visitez la page d'accueil httpclientUtil.serializeObject (context.getcookiestore (), "Resources / zhiHucookies"); // sérialiser les cookies zhihu, se connecter directement via les cookies la prochaine fois que vous vous connectez dans RETOUR TRUE;} Else {System.out.println ("Login a échoué" + Loggin); * Code de vérification de reconnaissance de l'œil nu * @param httpclient http client * @param context http context * @param url de vérification code adresse * @return * / public string yzm (clôturehttpclient httpclient, httpclientcontext context, string url) {httpclUtil.downloadfile (httpcliphIle "d: / test /", "1.gif", true); scanner sc = new scanner (System.in); String yzm = sc.nextline (); return yzm;}Image de reproduction:
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.