Dieser Artikel teilt einen Java-basierten Zhihu-Crawler, um grundlegende Informationen von Zhihu-Benutzern zu erfassen, basierend auf HTTPCLIENT 4.5 als Referenz. Der spezifische Inhalt ist wie folgt
Details:
CRABS 90W+ Benutzerinformationen (im Grunde sind alle aktiven Benutzer im Inneren)
Allgemeine Idee:
1. Simulieren Sie zuerst die Anmeldung bei Zhihu. Nach erfolgreicher Anmeldung serialisieren Sie die Cookies auf die Festplatte. Sie müssen sich nicht jedes Mal in der Zukunft anmelden (wenn Sie Anmeldung nicht simulieren, können Sie Cookies direkt aus dem Browser stopfen).
2. Erstellen Sie zwei Thread -Pools und einen Speicher. Ein Pool von Threads zum Crawl -Webseiten ist für die Ausführung von Anforderungen, die Rückgabe von Webseiteninhalten und das Speichern im Speichern verantwortlich. Das andere besteht darin, den Webseiten -Thread -Pool zu analysieren, der dafür verantwortlich ist, den Webseiteninhalt aus Speicher und Parsen zu entfernen, die Informationen des Benutzers zu analysieren und in der Datenbank zu speichern, die Homepage der Person, die der Benutzer folgt, zu analysieren und die Adressanforderung in den Crawling -Webseiten -Thread -Pool hinzuzufügen. Weiter weitermachen.
3. In Bezug auf URL -Deduplizierung konvertiere ich den besuchten Link MD5 direkt in die Datenbank. Überprüfen Sie vor jedem Besuch, ob der Link in der Datenbank vorhanden ist.
Bisher wurden 100 W -Benutzer erfasst und die besuchten Links sind 220 W+. Die Benutzer sind jetzt einige inaktive Benutzer. Aktivere Benutzer sollten im Grunde genommen gefangen werden.
Projektadresse: https://github.com/wycm/mycrawler
Implementierungscode:
Autor: Wo Yan Chen Si Link: https://www.zhihu.com/question/36909173/answer/97643000 Quelle: Zhihu Copyright gehört dem Autor. Für den kommerziellen Nachdruck wenden Sie sich bitte an den Autor zur Genehmigung. Für nichtkommerzielles Nachdruck geben Sie bitte die Quelle an. /**** @param httpclient http client* @param context http context* @return*/public boolean login (CloseableHttpclient httpclient, httpclientContext context {String yzm Httpget ("https://www.zhihu.com/#signin"); Httppost ("https://www.zhihu.com/login/email"); list <nameValuePair> formparams = new ArrayList <NameValuePair> (); yzm = yzm (httpclient, Kontext, "https://www.zhihu.com/captcha.gif?type=login"); // natürliche Erkennungsverifizierungscode Forparams.add (new BasicNamevaluePair ("Captcha", yzm); formparams.add (New Basicnamevairevaire ("_ xsrf"). formparams.add (New BasicNamevaluePair ("E -Mail", "E -Mail"); Forparams.add (neuer BasicNamevaluePair ("Passwort", "Passwort"); formparams.add (new BasicNamevaluePair ("Remember_me", "True"); Urlencodedformentity (formparams, "utf-8");} catch (UnsupportedenCodingException e) {E. printstacktrace ();} request.setEntity (Entity); LoginState = httpclientil.getwebpage (httpclient, context, contexte, utf-8 ", falsejson, utf-8", falsejson, utf-8 ", falsejson, utf-8", sextpclient, context, "utf-8", textejson, utf-8 ", sextpclient, contexte," utf-8 ", sextpclient, contexte," utf-8 ", textejson," utf-8 ", secal; JsonObject (LoginState); if (jo.get ("r"). ToString (). Equals ("0") {System.out.println ("Login erfolgreich"); getRequest = neu Httpget ("https://www.zhihu.com"); HttpclientUtil.SerializeObject (context.getCookiestore (), "Ressourcen/Zhihucookies"); // serialisieren Zhihu-Cookies, loget sich direkt durch die Cookies im nächsten Mal, wenn Sie als Rückkehr true; @param httpclient http client* @param context http context* @param url Verifizierungscodeadresse* @return*/public String yzm (ClodableableHttpclient httpclient, httpclientContext Context, String url) {httpclientil.down.downlode (httpcl. "1.gif", true); Scanner sc = neuer Scanner (System.in); String yzm = sc.Nextline (); return yzm;}Reproduktionsbild:
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.