Python獲取新浪微博cookie模擬登錄

這次嘗試模擬登錄微博批钠,獲取com網(wǎng)站cookie灯谣,cn不可用。

分析網(wǎng)站

  1. 首先打開weibo.com微博登錄頁面恨溜,如果已經(jīng)登錄需要先退出(其他的com登錄頁應(yīng)該也是可以的)。

  1. 打開chrome調(diào)試找前,查看傳輸狀態(tài)糟袁。清除記錄之后勾選 preserve log,再輸入帳號纸厉,當(dāng)輸入完帳號鼠標(biāo)點(diǎn)擊空白之后系吭,會觸發(fā)一個js事件五嫂,如上圖颗品。打開這個請求網(wǎng)址之后:發(fā)現(xiàn)這個json字典數(shù)據(jù)包含著下一步需要用的登錄表單,所以先注意一下沃缘,回頭再看躯枢。

  1. 輸入密碼之后登錄,觀察數(shù)據(jù)包槐臀。login.php看名字好像就是登錄的請求了锄蹂。 再看看它提交的數(shù)據(jù),sp就是密碼水慨,su就是帳號得糜。其他的數(shù)據(jù)怎么得到呢,我們就需要找到它執(zhí)行的ssologin.js了晰洒。


  1. 這個包也可以在js中找到朝抖,之后打開這個文件會看到一整片沒有格式化的js代碼,很頭疼谍珊≈涡可以<c-f> 查找關(guān)鍵字 rsa2艳汽,這一塊就是加密代碼,很深奧有沒有歇父。這一塊搞了半天最后還是google出來的.-.-.


OK,到這已經(jīng)亂了盼忌。。绊茧。整理一下思路铝宵。

我們登錄的步驟是:輸入帳號 -> 網(wǎng)頁返回prelogin,這個里面包含表單信息 -> 網(wǎng)頁調(diào)用ssologin.js加密數(shù)據(jù) -> 提交數(shù)據(jù)华畏。


我們就需要:獲得prelogin數(shù)據(jù) -> 用python仿照ssologin.js把數(shù)據(jù)加密 -> 提交捉超。

上代碼

  • 請求prelogin,獲取所需參數(shù)唯绍。用正則表達(dá)式截取字典拼岳,用eval函數(shù)把字符串轉(zhuǎn)換成字典類型,分別獲取值况芒。
prelogin_url = r'https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.15)'  #noqa
def Prelogin(prelogin_url):
    data = requests.get(prelogin_url).content.decode('utf-8')
    p = re.compile('\((.*)\)')
    data_str = p.search(data).group(1)
    server_data_dict = eval(data_str)
    pubkey = server_data_dict['pubkey']
    servertime = server_data_dict['servertime']
    nonce = server_data_dict['nonce']
    rsakv = server_data_dict['rsakv']
    return pubkey, servertime, nonce, rsakv
  • 有了上面的數(shù)據(jù)就可以加密帳號密碼了惜纸,帳號是由url加密,再用base64加密绝骚。密碼就比較復(fù)雜了耐版,基本按照ssologin.js來。
def RSAEncoder(username, password, pubkey, servertime, nonce):
    su_url = urllib.parse.quote_plus(username)
    su_encoded = su_url.encode('utf-8')
    su = base64.b64encode(su_encoded)
    su = su.decode('utf-8')
    rsaPublickey = int(pubkey, 16)
    e = int('10001', 16)
    key = rsa.PublicKey(rsaPublickey, e)
    message = str(servertime) + '\t' + str(nonce) + '\n' + str(password)
    password = rsa.encrypt(message.encode('utf-8'), key)
    sp = binascii.b2a_hex(password)
    return su, sp
  • 數(shù)據(jù)準(zhǔn)備好了之后就能填表單了压汪。
def PostData(username, password, pubkey, servertime, nonce, rsakv):
    su, sp = RSAEncoder(username, password, pubkey, servertime, nonce)
    post_data = {
        'encoding': 'UTF-8',
        'entry': 'weibo',
        'from': '',
        'gateway': '1',
        'nonce': nonce,
        'pagerefer': '',
        'prelt': '645',
        'pwencode': 'rsa2',
        'returntype': 'META',
        'rsakv': rsakv,
        'savestate': '7',
        'servertime': str(servertime),
        'service': 'miniblog',
        'sp': sp,
        'sr': '1920*1080',
        'su': su,
        'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', #noqa
        'useticket': '1',
        'vsnf': '1',
    }
    return post_data
  1. 可以登錄了粪牲。第一次請求到的網(wǎng)頁不是登錄成功的頁面,而是一個重定向止剖,如圖腺阳,用正則表達(dá)式提取網(wǎng)址,進(jìn)行訪問穿香,成功亭引!
def login(self):
    pubkey, servertime, nonce, rsakv = Prelogin(self.prelogin_url)
    post_data = PostData(self.username, self.password, pubkey, servertime,
                         nonce, rsakv)
    session = requests.Session()
    response = session.post(self.login_url, params=post_data,
                            headers=self.headers)
    text = response.content.decode('gbk')
    pa = re.compile(r'location\.replace\(\'(.*?)\'\)')
    redirect_url = pa.search(text).group(1)
    response = session.get(redirect_url, headers=self.headers)
    print(session.cookies)

GitHub開源地址:https://github.com/matianhe/crawler

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市皮获,隨后出現(xiàn)的幾起案子焙蚓,更是在濱河造成了極大的恐慌,老刑警劉巖洒宝,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件购公,死亡現(xiàn)場離奇詭異,居然都是意外死亡雁歌,警方通過查閱死者的電腦和手機(jī)宏浩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來将宪,“玉大人绘闷,你說我怎么就攤上這事橡庞。” “怎么了印蔗?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵扒最,是天一觀的道長。 經(jīng)常有香客問我华嘹,道長吧趣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任耙厚,我火速辦了婚禮强挫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薛躬。我一直安慰自己俯渤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布型宝。 她就那樣靜靜地躺著八匠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趴酣。 梳的紋絲不亂的頭發(fā)上梨树,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音岖寞,去河邊找鬼抡四。 笑死,一個胖子當(dāng)著我的面吹牛仗谆,可吹牛的內(nèi)容都是我干的指巡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胸私,長吁一口氣:“原來是場噩夢啊……” “哼厌处!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岁疼,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缆娃,沒想到半個月后捷绒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贯要,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年暖侨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇渗。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡字逗,死狀恐怖京郑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葫掉,我是刑警寧澤些举,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站俭厚,受9級特大地震影響户魏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挪挤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一叼丑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扛门,春花似錦鸠信、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至政基,卻和暖如春贞铣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沮明。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工辕坝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荐健。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓酱畅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親江场。 傳聞我的和親對象是個殘疾皇子纺酸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)址否,斷路器餐蔬,智...
    卡卡羅2017閱讀 134,699評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件佑附、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,119評論 4 61
  • 《老子》曰:“大白若辱樊诺,大方無隅,大器晚成音同,大音希聲词爬,大象無形,道隱無名权均。夫唯道顿膨,善始且善成锅锨。” 最潔白的好像污濁...
    王舒亮閱讀 716評論 1 0
  • 語言的暗示作用非常大恋沃,雖說盡信書則無必搞,可有時人卻有意識無意識的受他人的語言暗示改變自己的決策。當(dāng)一個人在猶豫...
    蓋小伍呀閱讀 145評論 0 2