Este artigo compartilha um rastreador Zhihu, com sede em Java, para capturar informações básicas dos usuários do Zhihu, com base no HTTPClient 4.5 para sua referência. O conteúdo específico é o seguinte
Detalhes:
Rastrear informações do usuário 90W+ (basicamente todos os usuários ativos estão dentro)
Ideia geral:
1. Primeiro, simule o login para Zhihu. Depois de fazer login com sucesso, serialize os cookies no disco. Você não precisa fazer login sempre no futuro (se não simular o login, poderá encher cookies diretamente do navegador).
2. Crie dois pools de threads e um armazenamento. Um pool de threads para rastejar as páginas da web é responsável pela execução de solicitações, retornando conteúdo da página da web e salvá -lo no armazenamento. O outro é analisar o pool de threads da página da web, responsável por retirar o conteúdo da página da web do armazenamento e analisá -lo, analisando as informações do usuário e salvando -o no banco de dados, analisando a página inicial da pessoa que o usuário está seguindo e adicionando a solicitação de endereço ao rastreamento da página da web. Continue em frente.
3. Em relação à desduplicação de URL, converti diretamente o link visitado MD5 no banco de dados. Antes de cada visita, verifique se o link existe no banco de dados.
Até agora, os usuários de 100W foram capturados e os links visitados são 220W+. Os usuários rastreados agora são alguns usuários inativos. Usuários mais ativos deveriam ter sido basicamente capturados.
Endereço do projeto: https://github.com/wycm/mycrawler
Código de implementação:
Autor: Wo Yan Chen Si Link: https://www.zhihu.com/question/36909173/answer/97643000 Fonte: os direitos autorais do Zhihu pertencem ao autor. Para reimpressão comercial, entre em contato com o autor para autorização. Para reimpressão não comercial, indique a fonte. /**** @param httpclient http cliente* @param contexto http context* @return*/public boolean login (fechamentohttpclient httpClient, httpclientContext context) {string yzm = null; string LogInstate = null; htTtTrequest) {string yzm = null; string LogInstate = null; hTTPTET) {string yzm = null; string; Httpget ("https://www.zhihu.com/#signin"); httpclientutil.getwebpage (httpclient, contexto, getRequest, "utf-8", false); httppot solicitando = novo Httppost ("https://www.zhihu.com/login/email"); list <nameValuepair> formParams = new ArrayList <NameValuepair> (); yzm = yzm (httpclient, Context, "https://www.zhihu.com/captcha.gif?type=login"); // Código de verificação de reconhecimento natural FormParams.add (new BasicNameValuepair ("CAPTCHA", YZM); formulário (new BasicNameValuepair ("_" xsr); form); FormParams.add (new BasicNameValuepair ("email", "email")); formParams.add (new BasicNameValuepair ("senha", "senha")); formParams.add (urlEncodEdValEPair ("Remember_Me", "True")); UrlEncodEdFormentity Entity = NULL; "Utf-8");} Catch (não suportadoEncodingException e) {E.PrintStackTrace ();} request.Setentity (entity); logInstate = httpclientUtil.getwebpage (httpclient, contexto, "utf-8", false); JsonObject (LogInstate); if (Jo.get ("R"). Httpget ("https://www.zhihu.com"); httpclientutil.getwebpage (httpclient, context, getRequest, "utf-8", false); Zhihu Cookies, faça login diretamente através dos cookies na próxima vez que você fizer login Return True;} else {System.out.println ("Login falhou" + LogInstate); retorna false;}}/*** @PeRet EnsendELe Reconhecimento Código de verificação* @param httpclient http* yzm (fechamentohttpclient httpclient, contexto httpclientContext, string url) {httpclientutil.downloadfile (httpclient, contexto, url, "d:/test/", "1.gif", true); scannner sc = scanner;Imagem de reprodução:
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.