爬虫技术实现空间相册采集器V.0.0.1版本
2019-02-11 23:37:47来源:博客园 阅读 ()
一. 功能需求分析:
在很多时候我们需要做这样一个事情:我们想把我们QQ空间上的相册高清图像下载下来,怎么做?到网上找软件?答案是否定的,理由之一:网上很多软件不知有没有病毒,第二它有可能捆了很多不必要的软件,对我们不友好,而且有些需要费用,那该怎么办?难道就无计可施了吗?答案又是否定的,我们可以通过爬虫技术完成一个QQ或者微信相册空间下载器,根据功能需求不同我们可以去改进它让它成为可批量下载的QQ空间下载器,或者做成多线程,图形化界面多功能采集器
二. 环境搭建:
Window+Chrome火狐浏览器+火狐驱动+requests/Linux+phantomjs+phantomjs驱动+requests
三. 技术点分析:
QQ空间是腾讯的产品通过浏览器F12分析请求我们得到与相册相关的链接ajax:
https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/fcgi-bin/fcg_list_album_v3?g_tk=214387010&callback=shine0_Callback&t=321694332&hostUin=1983273232&uin=1983273232&appid=4&inCharset=utf-8&outCharset=utf-8&source=qzone&plat=qzone&format=jsonp¬ice=0&filter=1&handset=4&pageNumModeSort=40&pageNumModeClass=15&needUserInfo=1&idcNum=4&callbackFun=shine0&_=1549870211769
https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/fcgi-bin/cgi_list_photo?g_tk=214387010&callback=shine0_Callback&t=601982730&mode=0&idcNum=4&hostUin=1983273232&topicId=V12TViY911k4R5&noTopic=0&uin=1983273232&pageStart=0&pageNum=30&skipCmtCount=0&singleurl=1&batchId=¬ice=0&appid=4&inCharset=utf-8&outCharset=utf-8&source=qzone&plat=qzone&outstyle=json&format=jsonp&json_esc=1&question=&answer=&callbackFun=shine0&_=1549870377883
通过实验我们获取到与数据请求成功相关的有几个参数:
g_tk,uin,hostUin,pageNum,pagestart , topicId
其中hostuin是要下载的QQ号,因为下载相册必须要自己先登录所以uin是自己QQ,topicid是QQ相册id可以通过第一个链接获取到,g_tk是QQ加密算法生成的一个数字串,用户在获取登录状态后还必须加上g_tk才能正确返回数据然后通过获取到的图片链接下载图片
一. 技术难点分析:
其他参数都很好获取,就是这个g_tk困扰了我很久,后来通过分析请求和网上找资料最终解决了这个问题,首先我们需要获取g_tk是如何计算的,由于Firefox自带的控制台功能不够用, 这里用Firefox+Firebug来做,其它浏览器应该也有对于的插件F12打开Firebug控制台,刷新QQ空间登录后的界面,然后点击“脚本”
function (a){
a=QZFL.util.URI(a);
var b;
a&&(a.host&&0<a.host.indexOf("qzone.qq.com")?b=QZFL.cookie.get("p_skey"):
a.host&&0<a.host.indexOf("qq.com")&&(b=QZFL.cookie.get("skey")));
b||(b=QZFL.cookie.get("skey")||QZFL.cookie.get("rv2"));
a=5381;
for(var c=0,d=b.length;c<d;++c)
a+=(a<<5)+b.charAt(c).charCodeAt();
return a&2147483647
}
我们可以看到它的值与p_skey或者skey有关,顺序是如果有p_skey那就通过p_skey计算。
终上所述我们得到g_tk计算方式:
def g_tk(p_skey):
hash = 5381;
for i in p_skey:
hash += (hash << 5)
+ ord(i)
return hash &
0x7fffffff
将上面代码整合我们很快就能得到我们想要数据,而p_skey在登录成功后的cookies中,我们为了方便无需通过分析cookie然后传入固定g_tk,我采用了一种很方便的方法,先用自动化框架登录成功后得到我们想要的cookie:
通过正则表达式得到p_skey。
一. 效果图:
以输入我的QQ为例
原文链接:https://www.cnblogs.com/jmzitboke/p/10363779.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 小白如何入门 Python 爬虫? 2019-08-13
- python day2-爬虫实现github登录 2019-08-13
- python爬虫学习之爬取超清唯美壁纸 2019-08-13
- python爬虫学习之用Python抢火车票的简单小程序 2019-08-13
- python爬虫常用库 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash