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 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实现爬取知乎用户基本信息相关推荐
- 我用Java+Redis+ES+Kibana技术对数百万知乎用户进行了数据分析,得到了这些...
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:_artoria_ http://tinyurl.c ...
- Java微信公众号开发之网页授权获取用户基本信息
本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...
- java正则表达式爬图片_Java正则表达式爬取网页,贴出完整代码
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.ope ...
- java铃声类_java多线程抓取铃声多多官网的铃声数据
一直想练习下java多线程抓取数据. 有天被我发现,铃声多多的官网(http://www.shoujiduoduo.com/main/)有大量的数据. 通过观察他们前端获取铃声数据的ajax http ...
- Java编写抓取用户信息代码_[代码全屏查看]-一个基于JAVA的知乎爬虫,抓取知乎用户基本信息...
[1].[代码] [Java]代码 作者:卧颜沉默 链接:https://www.zhihu.com/question/36909173/answer/97643000 来源:知乎 著作权归作者所有. ...
- java api 开发_Java开发人员应该知道的前20个库和API
java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...
- java 显示日历_JAVA显示日历(已知年和该年第一天为星期几)
这是我个人对这个题目理解,可能有些杂乱,仅供参考. 题目: 编写程序,提示用户输入年份和代表该年第一天是星期几的数字,然后在控制台上显示该年的日历表. 控制台显示结果如下:(我用_代表空格) 图1:以 ...
- scrapy框架爬取知乎用户
实现爬取一个大V的知乎用户开始爬取开始,我选了轮子哥,然后通过爬取轮子哥的粉丝和他关注的用户信息,再逐一对爬取到的用户进行进一步地获取粉丝和关注的用户信息,这样一直爬下去就能爬到很多很多用户,相当于能 ...
- java 使用webmagic 爬虫框架爬取博客园数据
java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录 webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...
- php爬虫:知乎用户数据爬取和分析
php爬虫:知乎用户数据爬取和分析 2016-04-10 PHP开发者 (点击上方公众号,可快速关注) 作者:崔小拽 原文链接:http://cuihuan.net/art ...
最新文章
- 腾讯云数据库副总监:图数据库好在哪?该用在哪?
- 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
- DataGrid 中間隔色的實現
- 从入门到实践,快速掌握 Nginx 研发
- 带权并查集--hdu3047 ZJnu stadium
- 日志 note_深入源码解析日志框架Log4j2(二)
- Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
- 石油-美元金融体系的形成
- 2021开发者最想学的编程语言,Go荣登榜首!
- QMutexLocker作用范围
- 为什么写了value属性 jq赋值value值不显示_为什么 String 要设计成 final,又如何设计一个不可变类呢?...
- CTF逆向(Reverse)知识点总结
- 杨明 南京师范大学计算机学院,陈松灿教授、杨明教授、耿新教授应邀来我校做学术报告...
- 分析整装台式机是否物有所值
- 信号在传播中产生的不同衰落:多径效应、时延扩展和相干宽带
- MySQL数据库时间和jdbc查询时间相差12小时问题解决
- 什么是RFID? RFID简介,射频识别技术发展历史.金属液体对RFID的影响
- 经典游戏中的游戏编程
- stm32f429igt6跑linux,TouchGFX在STM32F429IGT6上的移植(FreeRTOS版本)
- 万字长文揭秘谷歌成长史:荒诞梦想的副产品
热门文章
- 活动文档服务器,ACTIVEDOC 示例:实现活动文档服务器
- 查找重复代码_word高效操作:如何快速删除重复段落
- tablayout 增加数字小标_Android中TabLayout添加小红点的示例代码
- select2使用帮助
- 选择Eclipse 的列编辑模式
- 机器学习精讲(向量逼近+函数逼近)学习笔记——第五章
- Inkscape软件的使用与处理svg格式图片
- 贝叶斯球(Bayes ball)
- DeepMind成为AI界创业加速营:3年17名资深员工与高管离职
- Cartographer+LOAM+ LIO-SAM核心算法与源码剖析(室内+室外)