無聊的元旦,用Java實現QQ空間備份器時分析了如何進行模塊爬取實際地址中的需要信息的感悟,與圖解步驟,寫出來與大家共享,交流.
隨便點擊一個用戶進入空間,然后選擇日志,進入日志列表
比如我的空間日志列表的URL為:
http://user.qzone.qq.com/799089378/infocenter#!app=2&via=QZ.HashRefresh&pos=catalog_list
這個整體URL對每個用戶是一致的,不同的用戶換QQ號碼即可,筆者換成的是好友的1325103287,接下來就針對好友的日志列表進行分析
說明一下,筆者用來幫助分析的瀏覽器為Google Chrome
進入列表后然后就可以看到第一頁的日志了,點擊第2、3、……會發現上面的URL沒有變,但是每次點擊時先別急着進入,鼠標放到選定日志上,比如我選擇第一篇[回夢千年,君不見],這時注意左下角
可以看到右下角是以這樣的格式展示的
http://user.qzone.qq.com/1325103287/blog/1305125403
這個后面的數字是什么呢,可以嘗試不同的日志發現格式是一樣的,不同的是后面的參數,那么后面這個參數就是該篇日志的引導ID.
點擊進入日志,這時會發現URL改變了
http://user.qzone.qq.com/1325103287/infocenter#!app=2&via=QZ.HashRefresh&pos=1305125403
Pos屬性的值為改日志的引導ID
點擊下一篇
http://user.qzone.qq.com/1325103287/infocenter#!app=2&via=QZ.HashRefresh&pos=1305125304
發現URL中變得只是pos的值,這樣就可以定位到指定的ID了
所以設想一下,如果你能獲取到該QQ用戶的所有日志引導ID,然后搞個線程進行列表循環URL打開,是不是一個空間日志刷人氣的軟件就搞定了呢!
沒啥價值,跳過,轉到正題,
如何獲取用戶的所有引導ID呢?
還是進入列表
http://user.qzone.qq.com/1325103287/infocenter#!app=2&via=QZ.HashRefresh&pos=catalog_list
從這里開始分析起
這時右鍵查看元素,借助於瀏覽器(,其它瀏覽器也可以只是筆者用的是Chrome,所以就用Chrome來截圖分析)
瞅了半天,貌似Elements中沒有啥有價值的東東,哈哈,親 選錯標簽了,點擊Resource,然后就有驚喜了,
收獲的幸福不言而喻,注意這里的tblog(bloglist.html),用腳趾頭都能猜到要的信息在這里了,打開該組合列表
只有三項Images、Scripts、Stylesheets.
Images中只有圖片,Stylesheets中只有一個html文件.Scripts中會找到相關的信息嗎?試試就知道了.. 動手能力要強哇,不是所有問題都是坐着想出來的.
打開Scripts選項,然后進入空間日志,分別瀏覽第一頁.第二頁,第三頁...
會發現,Scripts中的文件發生了變化.
如圖,我瀏覽的頁數是這樣的:1、2、3、1.
成對出現了get_abs和get_count,這表明出現的文件中保存着我瀏覽時用的信息,是什么呢,繼續分析
我選擇第一個get_abs文件,會看到出現如下的提示
選擇第一個get_count也同樣有提示,但是這里的提示更幸福,注意idList中的屬性值,這不是日式的引導ID嘛! 驚呼一下,
然后查看get_count中的內容
itemList:即為當前展示頁上的用戶的參數,id表示日志的引導ID,read表示日志訪問量,
需要的東西貌似都找出來了,接下來就是分析了
Get_abs內容對比
第一個get_abs
后面的幾個get_abs多個幾個對我們達到目的沒用的參數,之所以說沒用是因為后面那些的值都沒變,我們找的是變的共性, 發現每次變的是pos的值跟num的值
Pos的值按照頁數遞增+15,num的值一直是15
跟MySQL中查詢很像,pos=0,num=15,表示第一頁從0開始顯示15個,pos=15,num=15表示從15開始,顯示15個.
但是get_abs中的內容也有共性和變性
共性: totalNum是用戶所有的日志數目
變形: title 是每篇日志的名稱,cate是日志的分類.
所以要獲取日志信息,只要按照get_abs請求進行發送,接收到的響應數據包中進行爬取我們需要的數據就可以了
怎么理解呢,
發送的包樣式肯定是第一個get_abs的形勢,因為不確定用戶日志的個數,所以第一次發出去數據包之后,我們收到的響應中
會在totalNum中進行包含.那么我們就可以計算日志有多少頁
頁數 = totalNum/15 (該用戶的totalNum=315,那么可以算出有頁數為315/15=21頁)
共性: totalNum是用戶所有的日志數目
變形: title 是每篇日志的名稱,cate是日志的分類.
所以要獲取日志信息,只要按照get_abs請求進行發送,接收到的響應數據包中進行爬取我們需要的數據就可以了
怎么理解呢,
發送的包樣式肯定是第一個get_abs的形勢,因為不確定用戶日志的個數,所以第一次發出去數據包之后,我們收到的響應中
會在totalNum中進行包含.那么我們就可以計算日志有多少頁
頁數 = totalNum/15 (該用戶的totalNum=315,那么可以算出有頁數為315/15=21頁)
證明想法是對的,只要循環21次就可以把所有日志的title、類別、發表時間、日志ID、找出來.
至於如何備份呢,可以選擇每個日志id創建一個文件,文件名為日志名稱,第一行創建日志的相關信息,也可以選擇每15個日志創建一個文件.根據個人喜好咯
至此我們的日志刷人氣軟件就徹底分析結束了!
接下來如果做日志備份(下載到本地),雖然我們需要的日志關鍵信息(ID)找出來了,日志個數也知道了
而且前面已經分析了每篇日志顯示方式是如下的方式
http://user.qzone.qq.com/1325103287/blog/1305125403
或者最終URL
http://user.qzone.qq.com/1325103287/infocenter#!app=2&via=QZ.HashRefresh&pos=1305125403
但是這樣我們查看源碼時候還是沒有發現日志內容,那么就需要我們繼續往下分析了.
按照前面的方式在日志頁面,同樣進行審查元素.看到tblog目錄,然后在stylsheets中會有一個為日志輸出文件服務的文件blog_output_data
內容如下:
上面的地址就是日志的實際地址
至此指定QQ用戶的所有日志ID獲取,與日志實際地址獲取介紹完畢.
可以根據上面的分析的實際地址進行爬取來實現QQ空間日志備份了.
轉載請注明出處[http://www.cnblogs.com/dennisit/archive/2013/01/03/2842925.html]