亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java實現(xiàn)爬取知乎用戶基本信息

 更新時間:2016年05月24日 16:24:45   作者:臥顏沉默  
這篇文章主要為大家介紹了一個基于JAVA的知乎爬蟲,抓取知乎用戶基本信息,感興趣的小伙伴們可以參考一下

本文實例為大家分享了一個基于JAVA的知乎爬蟲,抓取知乎用戶基本信息,基于HttpClient 4.5,供大家參考,具體內容如下
詳細內容:
抓取90W+用戶信息(基本上活躍的用戶都在里面)
大致思路:
1.首先模擬登錄知乎,登錄成功后將Cookie序列化到磁盤,不用以后每次都登錄(如果不模擬登錄,可以直接從瀏覽器塞入Cookie也是可以的)。
2.創(chuàng)建兩個線程池和一個Storage。一個抓取網(wǎng)頁線程池,負責執(zhí)行request請求,并返回網(wǎng)頁內容,存到Storage中。另一個是解析網(wǎng)頁線程池,負責從Storage中取出網(wǎng)頁內容并解析,解析用戶資料存入數(shù)據(jù)庫,解析該用戶關注的人的首頁,將該地址請求又加入抓取網(wǎng)頁線程池。一直循環(huán)下去。
3.關于url去重,我是直接將訪問過的鏈接md5化后存入數(shù)據(jù)庫,每次訪問前,查看數(shù)據(jù)庫中是否存在該鏈接。
到目前為止,抓了100W用戶了,訪問過的鏈接220W+?,F(xiàn)在抓取的用戶都是一些不太活躍的用戶了。比較活躍的用戶應該基本上也抓完了。
項目地址:https://github.com/wycm/mycrawler
實現(xiàn)代碼:

作者:臥顏沉默
鏈接:https://www.zhihu.com/question/36909173/answer/97643000
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
 
 /**
  *
  * @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", ""));//這個參數(shù)可以不用
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;
}

效果圖:

以上就是本文的全部內容,希望對大家的學習有所幫助。

相關文章

  • RateLimiter 源碼分析

    RateLimiter 源碼分析

    本文主要對ratelimiter的常用方法以及源碼進行了分析解讀,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Java微服務間接口調用 feign

    Java微服務間接口調用 feign

    這篇文章主要介紹了微服務間的接口調用feign,F(xiàn)eign是一種聲明式、模板化的HTTP客戶端。在spring cloud中使用Feign,可以做到類似于普通的接口的請求調用,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • 淺析Java的Spring框架中IOC容器容器的應用

    淺析Java的Spring框架中IOC容器容器的應用

    這篇文章主要介紹了Java的Spring框架中IOC容器容器的應用,包括BeanFactory容器和ApplicationContext容器的介紹,需要的朋友可以參考下
    2015-12-12
  • Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    Spring?invokeBeanFactoryPostProcessors方法刨析源碼

    invokeBeanFactoryPostProcessors該方法會實例化所有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的實例并且執(zhí)行postProcessBeanFactory與postProcessBeanDefinitionRegistry方法
    2023-01-01
  • java HashMap通過value反查key的代碼示例

    java HashMap通過value反查key的代碼示例

    本文講解了java HashMap通過value反查key的方法,直接提供代碼供大家參考使用
    2013-11-11
  • 詳解Java中異步轉同步的六種方法

    詳解Java中異步轉同步的六種方法

    針對應用中異步調用,能不能像同步調用一樣立刻獲取到命令的執(zhí)行結果,如何實現(xiàn)異步轉同步?不要擔心,本文就來為大家詳細講講Java中異步轉同步的六種方法,感興趣的可以了解一下
    2022-06-06
  • Java狀態(tài)機的一種優(yōu)雅寫法分享

    Java狀態(tài)機的一種優(yōu)雅寫法分享

    狀態(tài)機是一種數(shù)學模型,對于我們業(yè)務實現(xiàn)有很大的幫助。我們可以用非常多的方法實現(xiàn)狀態(tài)機,這篇文章就來介紹一個狀態(tài)機優(yōu)雅的實現(xiàn)方法,希望對大家有所幫助
    2023-04-04
  • ThreadLocal常用方法、使用場景及注意事項說明

    ThreadLocal常用方法、使用場景及注意事項說明

    這篇文章主要介紹了ThreadLocal常用方法、使用場景及注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中Console對象實例代碼

    Java中Console對象實例代碼

    這篇文章主要介紹了Java中Console對象實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Spring容器注入bean的五種方法逐個解析

    Spring容器注入bean的五種方法逐個解析

    依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調用者)需要另一個角色(另一個Java實例,被調用者)的協(xié)助時,在傳統(tǒng)的程序設計過程中,通常由調用者來創(chuàng)建被調用者的實例
    2023-02-02

最新評論