Este artículo comparte un Zhihu Crawler basado en Java para capturar información básica de los usuarios de Zhihu, basado en HttpClient 4.5 para su referencia. El contenido específico es el siguiente
Detalles:
Crawl 90W+ Información del usuario (básicamente todos los usuarios activos están dentro)
Idea general:
1. Primero, simule Iniciar sesión a Zhihu. Después de iniciar sesión con éxito, sea serializa las cookies al disco. No necesita iniciar sesión cada vez en el futuro (si no simula el inicio de sesión, puede rellenar cookies directamente desde el navegador).
2. Cree dos grupos de hilos y un almacenamiento. Un grupo de hilos para rastrear las páginas web es responsable de ejecutar solicitudes, devolver el contenido de la página web y guardarlo en almacenamiento. El otro es analizar el grupo de subprocesos de la página web, que es responsable de sacar el contenido de la página web del almacenamiento y analizarlo, analizar la información del usuario y guardarla en la base de datos, analizar la página de inicio de la persona que el usuario sigue y agregando la solicitud de dirección al grupo de hilos de la página web de rastreo. Sigue adelante.
3. Con respecto a la deduplicación de la URL, convierto directamente el enlace visitado MD5 en la base de datos. Antes de cada visita, verifique si el enlace existe en la base de datos.
Hasta ahora, los usuarios de 100W han sido capturados, y los enlaces visitados son 220W+. Los usuarios que se arrastran ahora son algunos usuarios inactivos. Los usuarios más activos deberían haber sido atrapados básicamente.
Dirección del proyecto: https://github.com/wycm/mycrawler
Código de implementación:
Autor: Wo Yan Chen SI Enlace: https://www.zhihu.com/question/36909173/answer/97643000 Fuente: Zhihu Copyright pertenece al autor. Para la reimpresión comercial, comuníquese con el autor para la autorización. Para la reimpresión no comercial, indique la fuente. /***** @param httpclient http Client* @param context http context* @return*/public boolean login (cierreHtttpClient httpclient, httpclientContext context) {String yzm = null; string loginstate = null; httpget getRequest = new New Httpget ("https://www.zhihu.com/#signin"); httpclientutil.getwebpage (httpclient, context, getRequest, "utf-8", falso); httpost = new Httppost ("https://www.zhihu.com/login/email"); List <NameValuePair> FormParams = new ArrayList <nameValuePair> (); yzm = yzm (httpClient, contexto, "https://www.zhihu.com/captcha.gif?type=login"); // código de verificación de reconocimiento natural formparams.add (new BasicNameValuePair ("Captcha", yzm)); FormParams.Add (New BasicValuePair ("_ XSRF" "," ")); formparams.add (new BasicNameValuePair ("correo electrónico", "correo electrónico")); formparams.Add (new BasicNameValuePair ("Password", "Password")); FormParams.Add (New BasicNameValuePair ("Record_Me", "True")); url UrlencodedFormentity (formparams, "utf-8");} catch (UnsupportedEncodingException e) {e.PrintStackTrace ();} request.SetEntity (entidad); loginState = httpClientUtUtil.getWebpage (httpClient, context, request " JSONObject(loginState);if(jo.get("r").toString().equals("0")){System.out.println("Login Successfully");getRequest = new HttpGet("https://www.zhihu.com");HttpClientUtil.getWebPage(httpClient,context,getRequest, "UTF-8", falso); // Visite la página de inicio httpclientUtil.SerializeObject (context.getCookiDore (), "Resources/Zhihucookies"); // Serialize Zhihu Cookies, inicie sesión directamente a través de las cookies la próxima vez que registre el retorno verdadero;} Else {System.out.Println ("Login Faller" falso;}}/*** Código de verificación de reconocimiento de ojo desnudo* @param httpclient http client* @param context http context* @param URL Código de verificación de la dirección* @return*/public string YZM (CloseableHttpClient httpclient, htttpClientContext context, cadena, cadena, cadena url) {httpClientUtil.downloadFile (httpclient, context, url, "d:/test/", "1.gif", true); Scanner sc = new Scanner (System.in); String yzm = sc.nextline (); return yzm;}Imagen de reproducción:
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.