图解QQ空间日志爬虫的全部日志获取与日志实际地址分析.

无聊的元旦,Java实现QQ空间备份器时分析了如何进行模块爬取实际地址中的需要信息的感悟,与图解步骤,写出来与大家共享,交流.

 

随便点击一个用户进入空间,然后选择日志,进入日志列表

比如我的空间日志列表的URL:

http://user.qzone.qq.com/799089378/infocenter#!app=2&via=QZ.HashRefresh&pos=catalog_list

 

这个整体URL对每个用户是一致的,不同的用户换QQ号码即可,笔者换成的是好友的1325103287,接下来就针对好友的日志列表进行分析

 

说明一下,笔者用来帮助分析的浏览器为Google Chrome

 

进入列表后然后就可以看到第一页的日志了,点击第23、……会发现上面的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),用脚趾头都能猜到要的信息在这里了,打开该组合列表

只有三项ImagesScriptsStylesheets. 

Images中只有图片,Stylesheets中只有一个html文件.Scripts中会找到相关的信息吗?试试就知道了.. 动手能力要强哇,不是所有问题都是坐着想出来的.

 

打开Scripts选项,然后进入空间日志,分别浏览第一页.第二页,第三页...

会发现,Scripts中的文件发生了变化.

如图,我浏览的页数是这样的:1231.

成对出现了get_absget_count,这表明出现的文件中保存着我浏览时用的信息,是什么呢,继续分析

我选择第一个get_abs文件,会看到出现如下的提示

选择第一个get_count也同样有提示,但是这里的提示更幸福,注意idList中的属性值,这不是日式的引导ID惊呼一下,

然后查看get_count中的内容

itemList:即为当前展示页上的用户的参数,id表示日志的引导ID,read表示日志访问量,

需要的东西貌似都找出来了,接下来就是分析了

Get_abs内容对比

第一个get_abs

http://b11.qzone.qq.com/cgi-bin/blognew/get_abs?hostUin=1325103287&blogType=0&cateName=&cateHex=&statYear=2013&reqInfo=7&pos=0&num=15&sortType=0&absType=0&source=0&rand=0.8141584321856499&g_tk=5381&verbose=1&ref=qzone

后面的几个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

内容如下:

http://b11.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin=1325103287&blogid=1305125403&styledm=ctc.qzonestyle.gtimg.cn&imgdm=ctc.qzs.qq.com&bdm=b.qzone.qq.com&mode=2&numperpage=15&blogseed=0.491407030262053&property=GoRE×tamp=1357192365&dprefix=&g_tk=5381&ref=qzone&v6=1&entertime=1357192364386&via=QZ.HashRefresh&pos=1305125403

上面的地址就是日志的实际地址

 

至此指定QQ用户的所有日志ID获取,与日志实际地址获取介绍完毕.

可以根据上面的分析的实际地址进行爬取来实现QQ空间日志备份了.

 

转载请注明出处[http://www.cnblogs.com/dennisit/archive/2013/01/03/2842925.html]

 

  在线交谈

posted @ 2013-01-03 14:28  苏二  阅读(3834)  评论(9编辑  收藏  举报