本文实例为大家分享了一个基于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 formParams = new ArrayList();

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;

}

效果图:

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

java爬取_java实现爬取知乎用户基本信息相关推荐

  1. 我用Java+Redis+ES+Kibana技术对数百万知乎用户进行了数据分析,得到了这些...

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:_artoria_ http://tinyurl.c ...

  2. Java微信公众号开发之网页授权获取用户基本信息

    本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...

  3. java正则表达式爬图片_Java正则表达式爬取网页,贴出完整代码

    import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.ope ...

  4. java铃声类_java多线程抓取铃声多多官网的铃声数据

    一直想练习下java多线程抓取数据. 有天被我发现,铃声多多的官网(http://www.shoujiduoduo.com/main/)有大量的数据. 通过观察他们前端获取铃声数据的ajax http ...

  5. Java编写抓取用户信息代码_[代码全屏查看]-一个基于JAVA的知乎爬虫,抓取知乎用户基本信息...

    [1].[代码] [Java]代码 作者:卧颜沉默 链接:https://www.zhihu.com/question/36909173/answer/97643000 来源:知乎 著作权归作者所有. ...

  6. java api 开发_Java开发人员应该知道的前20个库和API

    java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...

  7. java 显示日历_JAVA显示日历(已知年和该年第一天为星期几)

    这是我个人对这个题目理解,可能有些杂乱,仅供参考. 题目: 编写程序,提示用户输入年份和代表该年第一天是星期几的数字,然后在控制台上显示该年的日历表. 控制台显示结果如下:(我用_代表空格) 图1:以 ...

  8. scrapy框架爬取知乎用户

    实现爬取一个大V的知乎用户开始爬取开始,我选了轮子哥,然后通过爬取轮子哥的粉丝和他关注的用户信息,再逐一对爬取到的用户进行进一步地获取粉丝和关注的用户信息,这样一直爬下去就能爬到很多很多用户,相当于能 ...

  9. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  10. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

最新文章

  1. 腾讯云数据库副总监:图数据库好在哪?该用在哪?
  2. 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
  3. DataGrid 中間隔色的實現
  4. 从入门到实践,快速掌握 Nginx 研发
  5. 带权并查集--hdu3047 ZJnu stadium
  6. 日志 note_深入源码解析日志框架Log4j2(二)
  7. Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
  8. 石油-美元金融体系的形成
  9. 2021开发者最想学的编程语言,Go荣登榜首!
  10. QMutexLocker作用范围
  11. 为什么写了value属性 jq赋值value值不显示_为什么 String 要设计成 final,又如何设计一个不可变类呢?...
  12. CTF逆向(Reverse)知识点总结
  13. 杨明 南京师范大学计算机学院,陈松灿教授、杨明教授、耿新教授应邀来我校做学术报告...
  14. 分析整装台式机是否物有所值
  15. 信号在传播中产生的不同衰落:多径效应、时延扩展和相干宽带
  16. MySQL数据库时间和jdbc查询时间相差12小时问题解决
  17. 什么是RFID? RFID简介,射频识别技术发展历史.金属液体对RFID的影响
  18. 经典游戏中的游戏编程
  19. stm32f429igt6跑linux,TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)
  20. 万字长文揭秘谷歌成长史:荒诞梦想的副产品

热门文章

  1. 活动文档服务器,ACTIVEDOC 示例:实现活动文档服务器
  2. 查找重复代码_word高效操作:如何快速删除重复段落
  3. tablayout 增加数字小标_Android中TabLayout添加小红点的示例代码
  4. select2使用帮助
  5. 选择Eclipse 的列编辑模式
  6. 机器学习精讲(向量逼近+函数逼近)学习笔记——第五章
  7. Inkscape软件的使用与处理svg格式图片
  8. 贝叶斯球(Bayes ball)
  9. DeepMind成为AI界创业加速营:3年17名资深员工与高管离职
  10. Cartographer+LOAM+ LIO-SAM核心算法与源码剖析(室内+室外)