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点一个赞!哈哈哈

Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析的更多相关文章

  1. java实现QQ空间模拟登录

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  2. JS/java实现QQ空间自动点赞

    使用方法: 1:进入QQ空间 2:复制下面代码 3:按F12或右键审查元素 进入控制台 也就是console 4:粘贴  回车键  喝口水 5:如果嫌慢的话可以 修改这段代码. window.setI ...

  3. Python案例之QQ空间自动登录程序实现

    不多说,直接上干货! 工具选择: 电脑系统:win7,32 位,下面第二部安装SetupTools时注意系统版本要求: Python: 2.7.11,  相信只要是2.7的就可以实现: Seleniu ...

  4. iOS开发UI篇—模仿ipad版QQ空间登录界面

    iOS开发UI篇—模仿ipad版QQ空间登录界面 一.实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的 ...

  5. QQ模拟自动登录实现

    QQ模拟自动登录实现 本篇文章主要介绍"QQ模拟自动登录实现(带验证码)",主要涉及到java 实现QQ自动登录(带验证码)方面的内容,对于java 实现QQ自动登录(带验证码)感 ...

  6. QQ空间自动发广告解决方法

    最近空间好多人QQ都中了毒.每天我都有几十个好友刷空间话费.流量广告! QQ空间自动发广告的原因: 最近使用了刷赞或者其他QQ外挂软件(有些开发者或破解者会在这样的软件上留后门,请自己判断). 或者最 ...

  7. 技术揭秘“QQ空间”自动转发不良信息

    大家经常会看到QQ空间自动转发一些附带链接的不良信息,即便我们的QQ密码并没有被盗取.最近通过对一个QQ空间自动转发链接进行分析,发现该自动转发机制通过利用腾讯网站存在漏洞的页面,精心构造出利用代码获 ...

  8. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)

    开始搭建登录界面 登录界面效果图: 相关的图片资源下载百度云备份链接: http://pan.baidu.com/s/1o71cvMU 密码: 2h7e 步骤开始: 设置辅助窗口的位置在下方 快捷键o ...

  9. java抓取东方财富股票数据(附源码)

    背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...

随机推荐

  1. mybatis中$和#java代码演示

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 内容来源:http://blog.csdn.net/szwangdf/article/details/26714603 默认情况下 ...

  2. Linux(Debian、Ubuntu、Deepin等)安装最新版Chrome Unstable

    将下载源加入到系统的源列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...

  3. 初学JVM

    最近在读周志明的<深入理解Java虚拟机:JVM高级特性与最佳实践>,从中学到了很多,有些人可能会问为什么我们要学习JVM,他有什么用?在这里我想说一下,并不是这本书是大家都推荐的说有用处 ...

  4. pod出现include of non-modular header inside framework module 错误

    今天打包pod 的时候 出现的错误 -> AFNetworking+RX (3.1.0.18) - ERROR | [iOS] xcodebuild: Returned an unsuccess ...

  5. Spring学习(3)---Spring设值注入和构造注入

    (一)设值注入就是指要被注入的类中定义有一个setter()方法,并在参数中定义需要注入的对象.简单的看个例子. 建一个User类: package com.ioc; public class Use ...

  6. Java NIO学习笔记 NIO选择器

    Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为 ...

  7. 单机部署 kubernets 方法汇总

    #minikube : 可以方便的在本机用虚拟机创建一个开箱即用的Kubernetes集群 #kubeadm : 可以自动化的将多台Ubuntu或者CentOS主机组建成集群 #nanokube,ki ...

  8. 【知识整理】这可能是RxJava 2.x 最好的入门教程(一)

    一.前言 RxJava 对大家而言肯定不陌生,其受欢迎程度不言而喻.而在去年的早些时候,官方便宣布,将在一段时间后不再对 RxJava 1.x 进行维护,而在仓库中另辟蹊径,开始对 RxJava 2. ...

  9. Python os模块--路径、文件、系统命令等操作

    os模块包含普遍的操作系统功能. 注意:函数参数path是文件或目录的路径,filename是文件的路径,dirname是目录的路径,路径可以是相对路径,也可绝对路径 常见或重要的函数为加粗字体 os ...

  10. 大话Python格式化输出字符串

    1."{},{}".format(,)用法总结: '{0},{1}'.format('var1',132908) 'var1,132908' '{},{}'.format('var ...