程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java完成爬取知乎用戶根本信息

java完成爬取知乎用戶根本信息

編輯:關於JAVA

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;
}

後果圖:

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved