最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

作者:臥顏沉默
鏈接:https://www.zhihu.com/question/36909173/answer/97643000
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
 
 /**
  *
  * @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");//肉眼識(shí)別驗(yàn)證碼
formParams.add(new BasicNameValuePair("captcha", yzm));
formParams.add(new BasicNameValuePair("_xsrf", ""));//這個(gè)參數(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;
}
}
/**
  * 肉眼識(shí)別驗(yàn)證碼
  * @param httpClient Http客戶端
  * @param context Http上下文
  * @param url 驗(yàn)證碼地址
  * @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;
}

效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 詳解MySQL的簡(jiǎn)易封裝以及使用

    詳解MySQL的簡(jiǎn)易封裝以及使用

    本文主要介紹了MySQL的簡(jiǎn)易封裝以及使用。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Java?詳細(xì)講解線程的狀態(tài)及部分常用方法

    Java?詳細(xì)講解線程的狀態(tài)及部分常用方法

    在Java程序中,一個(gè)線程對(duì)象只能調(diào)用一次start()方法啟動(dòng)新線程,并在新線程中執(zhí)行run()方法。一旦run()方法執(zhí)行完畢,線程就結(jié)束了,本篇來講解Java線程的狀態(tài)以及部分常用方法
    2022-04-04
  • 淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    這篇文章主要介紹了Java中BIO、NIO和AIO的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java是自學(xué)好還是參加培訓(xùn)班好?

    Java是自學(xué)好還是參加培訓(xùn)班好?

    這篇文章主要介紹了Java是自學(xué)好還是參加培訓(xùn)班好這一問題,給大家介紹了哪些人適合自學(xué)java,哪些人適合java培訓(xùn)班學(xué)習(xí),大家可以看看內(nèi)容詳情
    2018-04-04
  • springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離

    springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離

    這篇文章主要介紹了springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離,需要的朋友可以參考下
    2019-06-06
  • Java中的迭代和遞歸詳解

    Java中的迭代和遞歸詳解

    這篇文章主要給大家介紹了關(guān)于Java中的迭代和遞歸,文章顯示分別介紹了Java中的迭代和遞歸,而后又介紹了迭代和遞歸的區(qū)別以及數(shù)形遞歸的相關(guān)內(nèi)容,文中介紹的很詳細(xì),相信會(huì)對(duì)大家學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒。
    2016-11-11
  • 使用springCloud+nacos集成seata1.3.0搭建過程

    使用springCloud+nacos集成seata1.3.0搭建過程

    這篇文章主要介紹了使用springCloud+nacos集成seata1.3.0搭建過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java  文件鎖的簡(jiǎn)單實(shí)現(xiàn)

    java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了java 文件鎖的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • SpringBoot整合SQLite數(shù)據(jù)庫全過程

    SpringBoot整合SQLite數(shù)據(jù)庫全過程

    sqlite是一個(gè)很輕量級(jí)的數(shù)據(jù)庫,可以滿足日常sql的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合SQLite數(shù)據(jù)庫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 詳解Spring MVC CORS 跨域

    詳解Spring MVC CORS 跨域

    本篇文章主要介紹了詳解Spring MVC CORS 跨域 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05

最新評(píng)論

中西区| 永登县| 铅山县| 新巴尔虎右旗| 双桥区| 礼泉县| 云龙县| 谷城县| 枣庄市| 方城县| 枝江市| 东丰县| 大化| 大关县| 富源县| 拉萨市| 新余市| 秦皇岛市| 漳平市| 永嘉县| 客服| 铜陵市| 尖扎县| 北宁市| 仲巴县| 东宁县| 利辛县| 专栏| 于都县| 安仁县| 钟祥市| 荣昌县| 云梦县| 梁山县| 吴江市| 靖安县| 双城市| 石林| 高清| 潞城市| 三穗县|