[Javascript] 爬虫 模拟新浪微博登陆
概述:
由于业务需要,要编写爬虫代码去爬去新浪微博用户的信息。
虽然在网上能找到不少信息,但由于新浪微博改版,其登陆机制进行了修改,故很多老的文章就不适合用了。
经过一番摸索,成功模拟新浪微博的登陆操作,项目使用的是Javascript语言,在ChromeExtension中运行, 跟大家分享一下这一过程和心得。
注意,本文写于2013.08.16,由于微博业务经常变化,随年月老去,文章可能不再适用。
正文:探索的过程
1. 了解大致过程
登陆微博,使用fiddler工具监视HTTP请求,截获如下操作:
可以看到在微博登陆的整个过程中,有四次重要的HTTP请求,分别是:
(1) GET /sso/prelogin.php
(2) POST /sso/login.php
(3) GET /ajaxlogin.php
(4) GET /u/2813262187
其中,sso是single sign on
sinaSSOController.preloginCallBack({"retcode":0,
"servertime":1376533839,
"pcid":"gz-7bdd82b8980057a8bbc1f86b21d5a86184dd",
"nonce":"R1KGHZ",
"pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443",
"rsakv":"1330428213",
"exectime":2})
返回的数据有servertime:服务时间戳,nonce:是一个6位随机码,pubkey:是用于rsa2密码加密的公钥,rsakv:显然也是加密用的。
这四个值都是需要在下一步用到的。
在久版本的新浪微博登陆机制当中,使用的是sha的加密方式,没有pubkey和rsakv参数,
因此,在网上看到的2012年的爬虫代码模拟登陆的代码都已经不适合用,但总体逻辑是没多大变化的,只需要稍作修改还是能用的,我就是这么走过来的,碰壁无数=.=
给出两篇参考文章:
For Python http://www.douban.com/note/201767245/
For PHP http://www.2cto.com/kf/201210/159591.html
}).call(sinaSSOEncoder);
//sinaSSOController = //sinaSSOController.init();