QQ空间说说抓取难度比较大,花了一个星期才研究清楚!

代码请移步到GitHub GitHub地址:https://github.com/20100507/Qzone 【没有加入多线程,希望你可以参与进来加入多线程不过 单个QQ请求频率不可以太高  过多的线程就需要 更多的QQ小号轮流登录】 不要忘了点一个赞 哈哈哈~~

1. 截图看一看效果:

      1.1抓取执行过程:         

1.2 部分数据截图:

 

1.3 每一个说说的具体内容

 1.4 70W说说数据文件大小:

        

2.接下来分析整个执行的流程

  2.1代码结构图【项目是采用Maven构建】:

       

简单的说一下整个代码的结构:

  1. QQBean         是对QQ密码和账号的简单的一个封装,
  2. VerifyCode      提取验证码的【如果你的QQ号码是异地登录就需要输入验证码或者腾讯检测到你不安全】
  3. QzoneEncrypt 加密 俩个重要的参数 一个是加密QQ密码【腾讯在传输密码是做得很安全】,一个是加密g_tk,这个在获取说说时必须携带
  4. GetQQByProperties  读取num.properties文件中的QQ账号和密码
  5. KeyWord   对QQ账号密码 和关键参数的一个提取
  6. Login 使用加密后的密码和QQ账号 登录 获取相关重要的cookie
  7. InputNameAndPwd 在login基础上再次调用其他登录接口直到真正登录到平常打开的QQ空间好友动态页面从页面中提取到 g_qzonetoken
  8. GetMsgBoard 获取QQ用户留言
  9. GetQNum 获取你的好友的列表
  10. GetShuoShuoData 获取说说数据
  11. login.js 是网上的一位高人,提取加密QQ密码的js精华
  12. entry.js是对g_tk的加密的获取
  13. num.properties 是存放QQ和密码的地方 如果你真的想保存数据的话 你最好放上6个无须验证码登录的QQ小号 就临时注册几个就完事了,切记一定不要使用一个,否则封号了就吉吉了。

   2.2Visio分析流程

      

上面的Vsio的图,和代码中基本上都对应了,对于保存留言也很简单,换一个路径就好,所有的必要参数和cookie都已经拿到。如果想要保存一个人所有的QQ说说数据,切换分页的参数即可,but,我的代码中没有加入分页,仅仅保存每个QQ用户的首页的说说数据,懒得弄了,就是那么回事,就是在研究参数和cookie真的很费劲!!!!

 2.3 测试代码中 请注意:

1. 注意我写的 try-catch,之前程序没有使用try-catch,程序在执行中 ,会由于网络原因抛出异常 ,如果抛给了虚拟机 ,JVM就停止,程序就挂了,干脆我就catch异常,如果catch到异常,我就在递归再次调用你,防止网络原因,导致程序极容易停止。

2.注意一点,我的在  %25 ,也就是轮询QQ号登陆,每个QQ号采集25个用户我就重新换其他的QQ用户登录,num.properties中的QQ数量越多越好【封号率越低】,%多少看自己的喜好!

    

 package qzone_enter;

 import java.io.IOException;
import java.util.List; import org.bianqi.enter.bean.QQBean;
import org.bianqi.enter.key.GetQQByProperties;
import org.bianqi.enter.key.KeyWord;
import org.bianqi.enter.login.InputNameAndPwd;
import org.bianqi.getdata.GetShuoShuoData; public class GetMyShuoShuo { public static List<QQBean> listQQ = null;
public static int k = 0; static {
try {
listQQ = GetQQByProperties.getQQNumAndPwd();
KeyWord.uin = listQQ.get(k).getNum();
KeyWord.password = listQQ.get(k).getPwd();
System.out.println("初始化"+KeyWord.uin+"登录~~~~~~~~~~~~~");
InputNameAndPwd.login();
} catch (IOException e) {
e.printStackTrace();
}
} public static void getShuoshuoDemo(long i, long j) throws Exception {
try {
for (; i <= j; i++) {
if (i % 25 == 0) {
if (k == listQQ.size()) {
k = 0;
}
KeyWord.uin = listQQ.get(k).getNum();
KeyWord.password = listQQ.get(k).getPwd();
System.out.println("切换到"+KeyWord.uin+"登录");
InputNameAndPwd.login();
k++;
}
GetShuoShuoData.getShuoData(Long.toString(i));
System.out.println(KeyWord.uin+"正在采集==============QQ用户" + i + "数据=======================");
}
} catch (Exception e) {
e.printStackTrace();
GetMyShuoShuo.getShuoshuo(i, j);
}
} public static void getShuoshuo(long i, long j) throws Exception {
try {
for (; i <= j; i++) {
if (i % 25 == 0) {
if (k == listQQ.size()) {
k = 0;
}
KeyWord.uin = listQQ.get(k).getNum();
KeyWord.password = listQQ.get(k).getPwd();
System.out.println("切换到"+KeyWord.uin+"登录");
InputNameAndPwd.login();
k++;
}
GetShuoShuoData.getShuoData(Long.toString(i));
System.out.println(KeyWord.uin+"正在采集==============QQ用户" + i + "数据=======================");
}
} catch (Exception e) {
e.printStackTrace();
GetMyShuoShuo.getShuoshuoDemo(i, j);
}
} public static void main(String[] args) throws Exception {
// 开始QQ号 结束QQ号
long i = 669424;
long j = 2000000000;
getShuoshuo(i, j);
}
}

 3.1总结

就目前来看,我的网速可能不是很好,但是一天依然可以保存30W说说数据,但是有时候程序也会假死,也许是网络不好。

还有,有时候 莫名的需要你输入验证码,没有办法你就在浏览器输入这个QQ账号密码,手动多输入几次验证码,他就一般不会检测了。不在需要验证码

PS【验证码需要打码平台 但是我没有整,but 需要money哦~还有 , 验证码图片会自动保存到项目路径下但是,手动输入验证码目前程序也不通过,可以修复的帮我修                     复一下 谢谢~~~】

num.properties中 QQ号码低于12个也有可能封号,再次强调QQ小号一定要多,让他检测不出你是爬虫。如果你就一个QQ号就不要尝试玩 ,封号不要怪我!

没有采用多线程技术,一个原因我也没有那么多的QQ小号。如果每一个QQ访问频率太高就会封号!!

记得在GitHub点一个赞!哈哈哈

最新文章

  1. vmware 安装dos注意
  2. Linux系统编程之IO_缓冲和非缓冲
  3. Wijmo 2016 V3发布
  4. sleep thread process
  5. linux 学习3 第四讲 文件常用命令
  6. vs2010编辑器中找不到System.Web.Extensions.dll
  7. EasyUI DataGrid编辑单元格时使用combogrid
  8. 分页。php 引用代码
  9. 使用Spring Cloud和Docker构建微服务架构
  10. Python实战之SocketServer模块
  11. TCP三次握手详解及释放连接过程
  12. WPF动态模板选择的两种实现
  13. extJs学习的资源
  14. Scala笔记
  15. Asp.net Mvc post表单提交多个实体模型
  16. 毕业设计---json,Struts,ajax以及JQuery简单案例
  17. C#中执行Dos命令
  18. Android线程和线程Handler基础一览
  19. IO Model- 同步,异步,阻塞,非阻塞
  20. JavaScript 学习(2)表单元素

热门文章

  1. int 与 int *
  2. JVM-7.Java内存模型与高效并发
  3. TypeScript 零基础入门
  4. jquery表单序列化
  5. twemproxy发送流程探索——剖析twemproxy代码正编
  6. 提高java编程质量 - (一)易变业务使用脚本语言编写
  7. 《Python编程从入门到实践》_第五章_if语句
  8. Ubuntu上使用Web QQ
  9. position定位和添加阴影
  10. 自定义分布式RESTful API鉴权机制