Python網絡爬蟲百度模擬登錄(一)

2021-02-07 程式設計師摸魚指南

本文作者

作者:星星在線, 簡書地址:https://www.jianshu.com/u/680e0e38ddc9

千呼萬喚shi出來呀,百度模擬登錄終於要呈現在大家眼前了,最近比較忙,晚上又得早點休息,這篇文章寫了好幾天才完成。這個成功以後,我打算試試百度網盤的其他接口實現。看看能不能把伺服器文件上傳到網盤,好歹也有幾T的空間。


登錄百度


先清理瀏覽器緩存,打開Charles,登錄一次百度主頁,抓取到登錄過程。



本來是想改一下寫作的格式,美觀一些,但是想了想,還是按照分析的順序來寫,這樣有利於大家了解一種分析的思路。看過上一篇新浪微博PC端模擬登陸的應該知道,首先要找到登錄的請求,一般為post,地址中有login



請求找到了,參數.,太TM多了。先觀察一下參數,一般無序、隨機、沒有什麼規則的參數有可能是變化參數,其他的一般都是固定參數。當然,也可以多次登錄抓包,對比一下大概也能確定。那麼我們確定一下變化的參數:token、tt(時間戳)、codestring、gid、password、verifycode(驗證碼)、rsakey、ppui_logintime、fp_uid、fp_info、dv、traceid


參數分析


確定了需要分析的參數,從哪個開始分析呢?隨意吧



一般有些參數之間是有關係的,比如token的請求參數裡需要gid參數



這裡我就不一一去分析參數間的關係了,直接來了啊


參數 gid


一方面其他參數需要它,另外就是這個參數是完全由本地js生成的。先看一下這個參數



搜索一下這個值,沒有。那麼我們再來搜一下這個name,就是gid,之前說過我們一般是找xxx=這種,先來搜一下gid=



點擊loginv4_9f3632a.js,然後在JavaScript頁籤搜索gid=



有好幾個,我圈出了這個getqrcode?請求,為啥捏?看圖,我們找到這個請求



看到請求裡的gid值了嗎?跟我們登錄的gid是一樣的,那就確定是這個地方了,gid=e.guideRandom,然後在這個腳本裡搜一下guideRandom



然後翻譯一下這個js,這.就自己去琢磨吧



參數 token


先搜索token的值



得到請求地址:https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1520951400830&class=login&gid=E8ED064-D480-4F3E-A5CE-BCF25F8DD1E2&loginversion=v4&logintype=dialogLogin&traceid=&callback=bd__cbs__6l1agx



就剩下callback,其他的請求裡也需要callback這個



搜一下bd__cbs__,為啥要搜這個?這個真的很痛苦,callback搜出來一大片,而且沒看出來什麼有效數據,值又搜不到,那就搜一半吧,你問我為啥?第六感,不管你信不信,反正我是信了



其實呢,有好幾個請求都有這個參數callback,然後我們觀察這些callback的規律,基本就是這個bd__cbs__沒變,所以可以搜一下它試試,搜到兩個



分析一下這段代碼,基本就是c.getUniqueId這個函數了,搜一下這個函數



oj8k,找到了,代碼貼下面,為什麼這麼寫?自己查js去,當然有更簡單了pyv8或者psexecjs



Token這裡我要再說一下,參數我們分析完了,你以為請求就成功了嗎?



Oh!yeah,之前我們都是得到所有請求參數就訪問成功了


就這裡卡了我好長時間。那麼碰到這種情況要從那幾個點著手呢,首先我想到的是cookies



然後向上去找Set Cookie的地方



訪問首頁得到四個cookie值,H_PS_PSSID、BIDUPSID、PSTM、BAIDUID



這裡又找到一個BDORZ,首頁很簡單,沒有什麼參數,



注意看這幾個參數,就在上面四個cookies中,t是時間戳,參數都搞定了,那麼Token的cookies也都搞定了,終於可以成功了,圖樣圖森破,還是不行。MMP,cookies搞定都不行,我還有招,請求頭!!!瀏覽器裡直接拷過去,看你還想咋的



然鵝....,算你狠,不過我不會輕易認輸的



調試他娘的,一遍一遍又一遍,兩遍三遍四五遍,各種姿勢都試了,終於高潮要來了,特麼的請求不一樣



先上圖


瀏覽器的正常請求


程序發送的請求


看到不一樣了吧,為什麼呢?我們在用requests庫的時候,get請求我比較習慣用.get(url, params=data),參數用params的方式傳入,再來看一下Token請求的參數



getapi是空,那很明顯

data = {  "getapi":"",  "tpl":"mn",  ....}session.get(url, params=data)


然後發送的請求就是/v2/api/?getapi=&tpl=mn&....,實際上正常的請求是/v2/api/?getapi&tpl=mn&...,竟然還有這種操作,我真的是第一次碰到,改一下

data = {  "tpl":"mn",  ...}url = ".../v2/api/?getapi&{}".format(urlencode(data))session.get(url)


到這裡才算OK了,最後總結了一下,請求的那個坑、請求頭中的Referer、cookies,終於可以說一句OJ8K


參數 dv


為什麼要先說這個dv,首先這個我沒完全破解,另外就算你用固定值,也不影響結果,這個不能詳細說,否則得好幾帖子,我們先搜dv=



切換到javascript頁籤



我們可以搜一下dv_Input這個控制項,它是沒有的,我就不展示了,然後應該就是window.LG_DV_ARG了



這裡有dvjsinput,上圖我們也看到了這個,切換到javascript頁籤看一下



然後打開瀏覽器,清空緩存,打開隱身窗口,打開開發者工具,訪問百度首頁



觀察一下dv值的特點,可以找一些比較有特色的部分搜一下,比如tk、@,這樣儘量減少我們調試js的過程,因為真的很痛苦



在console裡面執行一下這個計算,跟我們dv前面的值是不是類似,那就是它了,不管你是不是我都認為是。然後再搜一下@



剛才計算的Token+@+Ue(xx),這個肯定就是dv了,至於Ue嘛,我沒搞定,不過發現沒啥意義,寫固定值也可以,也就不用費心去找這個了。


夏天來了,推薦一款潮爆的T恤!

點擊下方閱讀原文,加入編程互助學習社群


相關焦點

  • Python爬蟲:學習Selenium並使用Selenium模擬登錄知乎
    介紹Selenium眾所周知很多網站的內容需要登錄後能去獲取他們的內容,這個時候我們就需要先登錄進去,所以就有了這篇模擬登錄文章模擬登錄我們要使用到 selenium 自動化測試工具,這個工具需要另行安裝,如果你是使用 pycharm,你可以直接去setting中點擊一鍵安裝selenium,然後還要去下載瀏覽器驅動,這裡我推薦使用Firefox,因為相對Chrome
  • Python網絡爬蟲應用實戰
    Python作為一門腳本語言,它靈活、易用、易學、適用場景多,實現程序快捷便利,早已經成為程式設計師們的一門編程利器。從小到伺服器運維的腳本,到大型軟體開發,使用python都能夠很靈活的快速實現。python不但可以快速實現大型的web應用程式,在網絡層的開發,以及工程計算、數學計算上都有方便的開發手段。Map&Reduce思想在python裡面也有著非常方便的實現。
  • Python網絡爬蟲學習資源整理
    /294.html(非常詳細的視頻教程,不過屬於進階版,如果想搞網絡爬蟲最好快點進入網絡爬蟲開發實戰中)·  智普教育python培訓就業班:http://www.qubiancheng.cn/823.html(非常詳細的Python教程)第二步——了解網絡爬蟲概念要是轉載的文章沒多大意義,我就說說自己理解的網絡爬蟲。
  • 網絡爬蟲系列:(2)爬蟲基礎
    續接《網絡爬蟲:(1)初識爬蟲》,了解爬蟲基本原理之後,我們想要成功抓取目標資源的話,還要具備爬蟲基礎知識,例如http和https協議是什麼,
  • python爬蟲-學習urllib和requests使用,模擬請求
    前言上篇我們了解了爬蟲的基本知識,這次我們來學習下,如何用Python模擬瀏覽器訪問網站和登錄。
  • 18個網站的Python爬蟲登錄示例 | 開源項目推薦
    ,有的是通過selenium登錄,有的是通過抓包直接模擬登錄,有的是利用scrapy,希望對Python初學者有所幫助,本項目用於研究和分享各大網站的模擬登陸方式和爬蟲程序。在該項目中,模擬登陸基本採用的是直接登錄或者使用selenium+webdriver的方式,有的網站直接登錄難度很大,比如qq空間和bilibili等,如果採用selenium就相對輕鬆一些。
  • 《python3 網絡爬蟲開發實踐》筆記
    最近閱讀了一本書《python3 網絡爬蟲開發實踐》,涉及的工具比較多,這本書可以當工具書來進行查閱。由於書中內容繁多,所以我記的筆記都是理論部分較多,代碼編寫以及工具的使用涉及不多,感興趣可以查閱下該書。
  • Python爬蟲——培訓
    Python這門程式語言包羅萬象,可以說掌握了python,除了一些特殊環境和高度的性能要求,Python 越來越適合於做科學計算。網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在 FOAF 社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取全球資訊網信息的程序或者腳本。
  • Python網絡爬蟲實戰(一)快速入門
    本系列從零開始闡述如何編寫Python網絡爬蟲,以及網絡爬蟲中容易遇到的問題,比如具有反爬,加密的網站,還有爬蟲拿不到數據,以及登錄驗證等問題
  • Python爬蟲之模擬知乎登錄
    收錄於話題 #爬蟲昨天受邀在 CSDN 微信群做了一次 Python 技術分享,主題是《用Python模擬知乎登錄》,效果非常不錯,發現越來越多的人加入到了 Python 陣容中。
  • Python:網絡爬蟲
    「 網絡爬蟲,可以按照指定的規則自動瀏覽或抓取網絡中的數據信息,而通過 Python 可以很輕鬆的編寫爬蟲程序或者腳本
  • 這是你們心心念念的Python網絡爬蟲秘籍
    第一步修煉的可能就是獲取數據而網絡爬蟲則是獲取數據的一大手段所以修煉網絡爬蟲顯得尤為重要作為一名剛修煉完Python基礎的俠客大部分會開始接觸Python網絡爬蟲但是他們在修煉Python網絡爬蟲的時候他們會遇到各種瓶頸官方文檔看不懂
  • Python爬蟲之模擬登錄wechat
    既然它這麼重要,如果我們可以利用爬蟲模擬登錄,是不是就意味著我們可以獲取這些信息,甚至可以根據需要來對它們進行有效的查看和管理。是的,沒錯,這完全可以。本篇博主將會給大家分享一下如何模擬登錄網頁版的微信,並展示模擬登錄後獲取的好友列表信息。微信模擬登錄的過程比較複雜,當然不管怎麼樣方法都是萬變不離其宗,我們還是使用fiddler抓包工具來模擬登錄的過程。
  • 利用python爬蟲實現上網帳號驗證登陸
    在一些不方便使用可視界面的情況下,可以利用python爬蟲工具實現上網帳號的驗證登陸。
  • Python網絡爬蟲從入門到進階工作坊 | 第2季
    數據時代,得數據者得天下,尤其是對於經管及社科研究者而言,當你學會了Python網絡爬蟲這個工具,將為你的研究插上加速器,自由獲取網絡上相關的研究數據。什麼是網絡爬蟲?網絡爬蟲是一種按照一定的規則,自動地抓取網頁信息的程序。因此,人們根據自己的需求,編寫程序制定網絡爬蟲使其自動地抓取特定網頁的信息。網絡爬蟲可以使計算機代替手工做事,大大提高獲取數據的效率。
  • Python 模擬新浪微博登錄
    模擬登錄是定向爬蟲製作中一個必須克服的問題,只有這樣才能爬取到更多的內容。實現微博登錄的方法有很多,一般我們在模擬登錄時首選WAP版。因為PC版網頁源碼中包括很多的js代碼,提交的內容也更多,不適合機器模擬登錄。
  • 爬蟲系列 | 9、爬蟲中模擬登錄的常用操作
    為什麼需要模擬登錄呢?很多時候我們爬取一些網頁的時候,站點會驗證我們的請求身份。
  • 通過python非常簡單的實現一個功能強大的爬蟲
    學習python的重要性我這裡就不贅述了。本文主要是通過python簡單的來實現一個功能強大的爬蟲。讓零基礎的小白們體會python的強大,和簡單,主要是簡單!那麼言歸正傳,我們進入正題。       首先我們需要了解什麼是爬蟲。爬蟲,或者說叫網絡爬蟲。
  • Python爬蟲入門看什麼書好 小編教你學Python
    隨著Python語言的火熱發展,目前很多人都在想學習Python,那麼Python爬蟲入門看什麼書好呢?小編為你推薦一本書,手把手教你學Python。這本書是一本實戰性的網絡爬蟲秘笈,在本書中不僅講解了如何編寫爬蟲,還講解了流行的網絡爬蟲的使用。
  • Python爬蟲:模擬登錄知乎完全詳解
    獲取登錄所需關鍵參數模擬登錄知乎,除了要POST自己的帳號密碼,還有兩個動態生成的參數,一個是_xsrf,還有一個就是討厭的驗證碼了。嘗試模擬登錄知乎關鍵的兩個東西我們都獲取到了,現在登錄一下試試吧!要將登錄方式考慮進去,如果檢測到用於輸入手機號,則我們應該訪問手機登錄網址;否則就是郵箱登錄。