java完成爬取知乎用戶根本信息。本站提示廣大學習愛好者:(java完成爬取知乎用戶根本信息)文章只能為提供參考,不一定能成為您想要的結果。以下是java完成爬取知乎用戶根本信息正文
本文實例為年夜家分享了一個基於JAVA的知乎爬蟲,抓取知乎用戶根本信息,基於HttpClient 4.5,供年夜家參考,詳細內容以下
具體內容:
抓取90W+用戶信息(根本上活潑的用戶都在外面)
年夜致思緒:
1.起首模仿登錄知乎,登錄勝利後將Cookie序列化到磁盤,不消今後每次都登錄(假如不模仿登錄,可以直接從閱讀器塞入Cookie也是可以的)。
2.創立兩個線程池和一個Storage。一個抓取網頁線程池,擔任履行request要求,並前往網頁內容,存到Storage中。另外一個是解析網頁線程池,擔任從Storage中掏出網頁內容並解析,解析用戶材料存入數據庫,解析該用戶存眷的人的首頁,將該地址要求又參加抓取網頁線程池。一向輪回下去。
3.關於url去重,我是直接將拜訪過的鏈接md5化後存入數據庫,每次拜訪前,檢查數據庫中能否存在該鏈接。
到今朝為止,抓了100W用戶了,拜訪過的鏈接220W+。如今抓取的用戶都是一些不太活潑的用戶了。比擬活潑的用戶應當根本上也抓完了。
項目地址:https://github.com/wycm/mycrawler
完成代碼:
作者:臥顏緘默 鏈接:https://www.zhihu.com/question/36909173/answer/97643000 起源:知乎 著作權歸作者一切。貿易轉載請接洽作者取得受權,非貿易轉載請注明出處。 /** * * @param httpClient Http客戶端 * @param context Http高低文 * @return */ public boolean login(CloseableHttpClient httpClient, HttpClientContext context){ String yzm = null; String loginState = null; HttpGet getRequest = new HttpGet("https://www.zhihu.com/#signin"); HttpClientUtil.getWebPage(httpClient,context, getRequest, "utf-8", false); HttpPost request = new 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");//肉眼辨認驗證碼 formParams.add(new BasicNameValuePair("captcha", yzm)); formParams.add(new BasicNameValuePair("_xsrf", ""));//這個參數可以不消 formParams.add(new BasicNameValuePair("email", "郵箱")); formParams.add(new BasicNameValuePair("password", "暗碼")); formParams.add(new BasicNameValuePair("remember_me", "true")); UrlEncodedFormEntity entity = null; try { entity = new UrlEncodedFormEntity(formParams, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } request.setEntity(entity); loginState = HttpClientUtil.getWebPage(httpClient,context, request, "utf-8", false);//登錄 JSONObject jo = new JSONObject(loginState); if(jo.get("r").toString().equals("0")){ System.out.println("登錄勝利"); getRequest = new HttpGet("https://www.zhihu.com"); HttpClientUtil.getWebPage(httpClient,context ,getRequest, "utf-8", false);//拜訪首頁 HttpClientUtil.serializeObject(context.getCookieStore(),"resources/zhihucookies");//序列化知乎Cookies,下次登錄直接經由過程該cookies登錄 return true; }else{ System.out.println("登錄掉敗" + loginState); return false; } } /** * 肉眼辨認驗證碼 * @param httpClient Http客戶端 * @param context Http高低文 * @param url 驗證碼地址 * @return */ public String yzm(CloseableHttpClient httpClient,HttpClientContext context, String url){ HttpClientUtil.downloadFile(httpClient, context, url, "d:/test/", "1.gif",true); Scanner sc = new Scanner(System.in); String yzm = sc.nextLine(); return yzm; }
後果圖:
以上就是本文的全體內容,願望對年夜家的進修有所贊助。