基於Python3+Requests的貼吧簽到助手

來源:互聯網
上載者:User

標籤:cookie   one   思路   headers   講解   百度首頁   header   blog   檔案   

因為總是忘記簽到,所以嘗試寫了一個簽到指令碼,因為使用的是Python3,所以沒法使用Urllib2,於是選擇了Requests,事實證明,Requests比Urllib2好用。整體思路比較簡單,就是類比百度登陸的過程進行互動,然後擷取COOKIES並儲存,之後都使用COOKIES登陸,然後類比貼吧用戶端的收發包過程進行互動,但實際上遇到了非常多的問題,這裡就記錄下這次的調試經驗

主程式比較簡單,就是判斷是否登陸成功,然後開始簽到,其中判斷登陸是否成功時,參考的程式中用的是訪問此地址“http://tieba.baidu.com/i/i/forum?&pn=1”,檢測狀態值,用瀏覽器抓包查看是返回302自動跳轉,不過就算程式裡加入allow_redirects=False,傳回值也是200,所以筆者改用了貼吧首頁https://tieba.baidu.com/index.html,然後檢測是否有關鍵字“愛逛的吧”

擷取貼吧列表時,絕大部分程式都使用的是“http://tieba.baidu.com/f/like/mylike?&pn=”來擷取貼吧列表,然後還需翻頁,但筆者在測試時發現此網址並沒有相應的列表,並且在網頁中直接開啟時有時也沒有任何資料,所以在github上翻閱許多代碼最後找到"http://tieba.baidu.com/mo/m?tn=bdFBW&tab=favorite"這個地址,目前不清楚每頁最多能容納多少貼吧(測試數量為120),如果出現問題可以反饋給筆者

簽到時就是擷取貼吧的fid值和tbs值進行post,前兩個值可以在訪問網頁版對應貼吧擷取(實際上可以是定製,這個參數不是必需的,為了減少風險,還是選擇盡量正確、完整地post資訊),根據傳回值裡面的error_code就可以獲得簽到情況,為了防止向已簽到的貼吧post簽到資訊,在簽到之前加了一個檢驗,就是訪問網頁版對應的貼吧,然後找到對應的關鍵字,這裡用的是內建的Regex庫re,如果熟悉beautifulsoup可以使用這個庫來實現,並且連續訪問速度不能過快,否則會返回錯誤碼(網頁版簽到會彈驗證碼,用戶端沒有驗證碼,暫時不知道會不會有其他問題,為了安全穩定,簽到不同貼吧之間加了個隨機的延遲)

類比用戶端簽到時post的資訊需要進行一次加密(網頁版不需要),這個是直接移植的參考代碼,筆者沒有親自抓包測試,所以不做講解

上面的是帶cookies的訪問,其中最重要的一條就是bduss,這個是百度登陸成功時返回的cookies(同時會返回stoken、ptoken等cookies,但不是必需的),甚至僅有這一條cookies就可以登陸百度,所以在完成類比簽到之後又嘗試寫了用賬密類比登陸百度,因為擷取bduss體驗起來還是不夠方便

登陸百度這段代碼是卡了最長時間的,因為。。。眾說紛紜,做了太多嘗試

登陸時需要先訪問百度首頁,然後訪問登陸介面,擷取這兩個的cookies(僅訪問登陸介面也是可以的),因為正常用網頁登陸時是一步一步點進去的,而不可能是直接post資訊,所以在沒獲得前兩個網頁的cookies的1況下post是非法的(要獲得一個cookies,好像是baiduid),然後帶著cookies去訪問百度的api頁面擷取token(沒有訪問前面頁面的cookies擷取到的是the fisrt two args should be string type:0,1!意味著缺少資訊),擷取之後帶著賬密和token令牌post就可以了(這裡的headers是特殊的,參見代碼,用普通的headers無法登陸),然後根據傳回值error判斷是否有驗證碼(基本都有),然後下載驗證碼放入一個gif檔案並開啟,手動輸入驗證碼然後帶著驗證碼標籤和驗證碼內容再post,然後根據傳回值判斷情況(注意千萬不要輸錯密碼,多次錯誤會被鎖定3小時!)如果登陸成功儲存cookies即可,下次就只需帶cookies登陸,並且每次登陸之後都會重新整理和自動儲存新cookies,目前不清楚多久會失效,需要觀察

在類比post的過程中,發現抓包得到的post資訊相比參考代碼多了很多,於是尋找了相關資料,當時參考了“https://www.cnblogs.com/qiyeboy/p/5722424.html”的文章,寫了很長一段繁瑣的代碼,最後發現這些參數不是必需的。。。只當是練手罷了

本文記錄了開發過程中遇到的一些問題以及心得體會,代碼託管在在GIT上“https://github.com/Pyrokine/tieba_autosign”,在檔案夾中建立一個cookie的空檔案即可(沒有寫相應的建立代碼)

感謝以下GEEKS

https://github.com/chaonet/baidu_tieba_auto_sign

http://blog.csdn.net/programmer_sir/article/details/38961109

基於Python3+Requests的貼吧簽到助手

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.