当前位置: 移动技术网 > IT编程>开发语言>Java > java实现爬取知乎用户基本信息

java实现爬取知乎用户基本信息

2019年07月22日  | 移动技术网IT编程  | 我要评论
本文实例为大家分享了一个基于java的知乎爬虫,抓取知乎用户基本信息,基于httpclient 4.5,供大家参考,具体内容如下 详细内容: 抓取90w+用户信息(基本

本文实例为大家分享了一个基于java的知乎爬虫,抓取知乎用户基本信息,基于httpclient 4.5,供大家参考,具体内容如下
详细内容:
抓取90w+用户信息(基本上活跃的用户都在里面)
大致思路:
1.首先模拟登录知乎,登录成功后将cookie序列化到磁盘,不用以后每次都登录(如果不模拟登录,可以直接从浏览器塞入cookie也是可以的)。
2.创建两个线程池和一个storage。一个抓取网页线程池,负责执行request请求,并返回网页内容,存到storage中。另一个是解析网页线程池,负责从storage中取出网页内容并解析,解析用户资料存入数据库,解析该用户关注的人的首页,将该地址请求又加入抓取网页线程池。一直循环下去。
3.关于url去重,我是直接将访问过的链接md5化后存入数据库,每次访问前,查看数据库中是否存在该链接。
到目前为止,抓了100w用户了,访问过的链接220w+。现在抓取的用户都是一些不太活跃的用户了。比较活跃的用户应该基本上也抓完了。
项目地址:
实现代码:

作者:卧颜沉默
链接: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;
}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网