用Python爬蟲實現自動簽到(二)—— requests方式

用Python爬蟲實現自動簽到(二)—— requests方式

上一篇博客詳細介紹了用selenium模擬瀏覽器行爲進行自動簽到的過程。具體實現過程請參照

用Python爬蟲實現自動簽到(一)—— selenium方式

使用selenium實現自動簽到確實是一個方便快捷的方式,但不可否認的是這種方式確實有一個硬傷,就是太慢了,模擬瀏覽器進行加載、點擊操作,即使用上顯性等待這種高端操作也最多隻能把整個運行過程優化到5秒以內。

作爲一個有性能潔癖的程序猿,5秒顯然是我不能接受的。那還有什麼方式比它更快呢,很簡單,直接發post請求啊,直接對網站發起post或get請求永遠是最快的方式,網上流傳的各種秒殺腳本用的也是這種方式。

requests庫的使用

本來之前用scrapy做了一個版本,結果發現爲了實現這麼個小功能用scrapy太過笨重,代碼量還多,乾脆換成requests

requests庫的使用方法非常簡單,網上有對應的中文文檔可以參考requests文檔

直接上代碼

response = requests.get("http://www.baidu.com")
print(response.text)

post請求則是要先實例化一個session對象,用session對象進行後續的post請求和其他操作,session對象會爲你保存你的登錄狀態,包括cookie等內容。

form_data1 = {"mobile": "xxxx",
              "mobileErr": "",
              "password": "xxxx",
              "passwordErr": "",
              "uuid": "0",
              "mid": "0"}
s = requests.Session()
response = s.post(login_url, data=form_data)
# print(response.text)

當session攜帶了登錄信息之後就可以進行後續的簽到操作,而簽到操作也很簡單,直接用gei請求訪問一下籤到按鈕對應的鏈接即可。當然無論是獲取簽到按鈕的鏈接還是獲取登錄所需要的的form表單數據都離不開抓包。我用的抓包軟件是Fiddler,抓包這裏我就不詳細講了,網上可以搜到很多教程,有機會的話,我會單獨寫一篇博客總結一下抓包的一些經驗,包括遇到的一些坑。

最後把完整代碼放一下。

import requests
import sys
import traceback

login_url = "https://gf2.wmbuluo.com/addons/yun_shop/api.php?i=2&uuid=0&mid=0&type=5&shop_id=null&route=member.login.index"
target_url = 'https://gf2.wmbuluo.com/addons/yun_shop/api.php?i=2&uuid=0&mid=0&type=5&shop_id=null&route=plugin.sign.Frontend.Modules.Sign.Controllers.sign.sign'
form_data1 = {"mobile": "xxxx",
              "mobileErr": "",
              "password": "xxxx",
              "passwordErr": "",
              "uuid": "0",
              "mid": "0"}

def run(form_data):
    s = requests.Session()
    response = s.post(login_url, data=form_data)
    # print(response.text)
    # print(response.status_code)
    if response.status_code == 200:
        resp = s.get(target_url)
        print(resp.status_code)

def main():
    run(form_data1)
    print("run1")

if __name__ == '__main__':
    try:
        sys.exit(main())
    except Exception as e:
        traceback.print_exc()

其他相關資料已經同步到我的博客網站,歡迎訪問我的個人博客瞭解更多內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章