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
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