Java版 QQ空間自動登陸無需拷貝cookie一天抓取30WQQ說說數據&流程分析【轉】

Java版 QQ空間自動登陸無需拷貝cookie一天抓取30WQQ說說數據&流程分析

 

QQ空間說說抓取難度比較大,花了一個星期才研究清楚!html

 代碼請移步到GitHub GitHub地址:https://github.com/20100507/Qzone 【沒有加入多線程,但願你能夠參與進來加入多線程不過 單個QQ請求頻率不能夠過高  過多的線程就須要 更多的QQ小號輪流登陸】 不要忘了點一個贊 哈哈哈~~       java

1. 截圖看一看效果:git

      1.1抓取執行過程:         github

     1.2 部分數據截圖:
瀏覽器

 

1.3 每個說說的具體內容安全

 1.4 70W說說數據文件大小:cookie

        

 

2.接下來分析整個執行的流程網絡

  2.1代碼結構圖【項目是採用Maven構建】:多線程

       

   簡單的說一下整個代碼的結構:post

  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數量越多越好【封號率越低】,%多少看本身的喜愛!

    

複製代碼
 1 package qzone_enter;
 2 
 3 import java.io.IOException;
 4 import java.util.List;
 5 
 6 import org.bianqi.enter.bean.QQBean;
 7 import org.bianqi.enter.key.GetQQByProperties;
 8 import org.bianqi.enter.key.KeyWord;
 9 import org.bianqi.enter.login.InputNameAndPwd;
10 import org.bianqi.getdata.GetShuoShuoData;
11 
12 public class GetMyShuoShuo {
13 
14     public static List<QQBean> listQQ = null;
15     public static int k = 0;
16     
17     static {
18         try {
19             listQQ = GetQQByProperties.getQQNumAndPwd();
20             KeyWord.uin = listQQ.get(k).getNum();
21             KeyWord.password = listQQ.get(k).getPwd();
22             System.out.println("初始化"+KeyWord.uin+"登陸~~~~~~~~~~~~~");
23             InputNameAndPwd.login();
24         } catch (IOException e) {
25             e.printStackTrace();
26         }
27     }
28 
29     public static void getShuoshuoDemo(long i, long j) throws Exception {
30         try {
31             for (; i <= j; i++) {
32                 if (i % 25 == 0) {
33                     if (k == listQQ.size()) {
34                         k = 0;
35                     }
36                     KeyWord.uin = listQQ.get(k).getNum();
37                     KeyWord.password = listQQ.get(k).getPwd();
38                     System.out.println("切換到"+KeyWord.uin+"登陸");
39                     InputNameAndPwd.login();
40                     k++;
41                 }
42                 GetShuoShuoData.getShuoData(Long.toString(i));
43                 System.out.println(KeyWord.uin+"正在採集==============QQ用戶" + i + "數據=======================");
44             }
45         } catch (Exception e) {
46             e.printStackTrace();
47             GetMyShuoShuo.getShuoshuo(i, j);
48         }
49     }
50 
51     public static void getShuoshuo(long i, long j) throws Exception {
52         try {
53             for (; i <= j; i++) {
54                 if (i % 25 == 0) {
55                     if (k == listQQ.size()) {
56                         k = 0;
57                     }
58                     KeyWord.uin = listQQ.get(k).getNum();
59                     KeyWord.password = listQQ.get(k).getPwd();
60                     System.out.println("切換到"+KeyWord.uin+"登陸");
61                     InputNameAndPwd.login();
62                     k++;
63                 }
64                 GetShuoShuoData.getShuoData(Long.toString(i));
65                 System.out.println(KeyWord.uin+"正在採集==============QQ用戶" + i + "數據=======================");
66             }
67         } catch (Exception e) {
68             e.printStackTrace();
69             GetMyShuoShuo.getShuoshuoDemo(i, j);
70         }
71     }
72 
73     public static void main(String[] args) throws Exception {
74         // 開始QQ號 結束QQ號
75         long i = 669424;
76         long j = 2000000000;
77         getShuoshuo(i, j);
78     }
79 }
複製代碼

 

 3.1總結

                   就目前來看,個人網速可能不是很好,可是一天依然能夠保存30W說說數據,可是有時候程序也會假死,也許是網絡很差。

                   還有,有時候 莫名的須要你輸入驗證碼,沒有辦法你就在瀏覽器輸入這個QQ帳號密碼,手動多輸入幾回驗證碼,他就通常不會檢測了。不在須要驗證碼

                  PS【驗證碼須要打碼平臺 可是我沒有整,but 須要money哦~還有 , 驗證碼圖片會自動保存到項目路徑下可是,手動輸入驗證碼目前程序也不經過,能夠修復的幫我修                     復一下 謝謝~~~】

                 num.properties中 QQ號碼低於12個也有可能封號,再次強調QQ小號必定要多,讓他檢測不出你是爬蟲。若是你就一個QQ號就不要嘗試玩 ,封號不要怪我!

                  沒有采用多線程技術,一個緣由我也沒有那麼多的QQ小號。若是每個QQ訪問頻率過高就會封號!!

                  記得在GitHub點一個贊!哈哈哈

 

轉自:http://www.cnblogs.com/bianqi/p/7206885.html

相關文章
相關標籤/搜索