日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫 - 00.实现什么值得买签到

發布時間:2023/12/29 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫 - 00.实现什么值得买签到 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么值得買是一個不錯的hao yang mao網站,通過堅持不斷簽到就能會得到金幣積分等獎勵
下面通過Python來實現一個簽到的腳本,然后把腳本放到服務器上,讓它每天定時執行,這樣就可以實現自動簽到了

一、分析實現流程

  • 通過瀏覽器抓取簽到接口
  • 分析接口的請求參數和響應數據
  • 編寫代碼實現
  • 二、通過瀏覽器抓取簽到接口

    由于現在張大媽的登錄需要驗證碼,驗證碼是一個比較復雜的問題,這里就跳過驗證碼的問題,直接用Cookie進行免登錄發送請求

    打開 Chrome / Firefox 瀏覽器訪問 什么值得買, 然后登錄你的帳號

    按F12,點擊網絡(network)標簽,點擊頁面的簽到按鈕,看到如下的請求,就是我們需要的簽到接口了

    三、分析接口的請求參數和響應數據

    接口地址:https://zhiyou.smzdm.com/user/checkin/jsonp_checkin?callback=jQuery112402949185715359607_1631598321047&_=1631598321058

    請求的報文如下:

    GET /user/checkin/jsonp_checkin?callback=jQuery112402949185715359607_1631598321047&_=1631598321058 HTTP/1.1 Host: zhiyou.smzdm.com User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Referer: https://www.smzdm.com/ Cookie: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Sec-Fetch-Dest: script Sec-Fetch-Mode: no-cors Sec-Fetch-Site: same-site Pragma: no-cache Cache-Control: no-cache

    正確請求響應如下:

    jQuery112402949185715359607_1631598321047({"error_code":0,"error_msg":"","data":{"add_point":xxx,"checkin_num":"xx","point":xx,"exp":xx,"gold":xx,"prestige":xx,"rank":xx,"slogan":"<div class=\"signIn_data\">\u4eca\u65e5\u5df2\u9886<span class=\"red\">0<\/span>\u79ef\u5206<\/div>","cards":"85","can_contract":0,"continue_checkin_days":4,"continue_checkin_reward_show":false}})

    錯誤響應如下:

    jQuery112402949185715359607_1631598321047({"error_code":9999,"error_msg":"","data":[]})

    從上面的請求和響應可以看出,該接口需要兩個請求參數,一個是callback回調函數名稱,一個是時間戳,響應的是JSONP數據,這就好辦了,學過JSONP的原理就會知道,回調函數名稱可以隨便寫,時間戳通過time模塊獲取一下,至于響應數據,我們只要拿到中間的JSON數據解析即可,一切就緒,下面開始編程實現

    四、編程實現

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' @Desc: 本腳本用于smzdm簽到 API: GET https://zhiyou.smzdm.com/user/checkin/jsonp_checkin?callback=jQuery1124017478852004010437_1631422603307&_=1631422603315''' __author__ = 'Conca'import requests import time import jsonheaders = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0","Referer": "https://www.smzdm.com/","Cookie": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # 替換為你的cookie }# 簽到 def smzdm_sign_in():try:url = "https://zhiyou.smzdm.com/user/checkin/jsonp_checkin"params = {"callback": "myCalback","_": int(time.time()*1000)}# 發送一個get請求response = requests.get(url, params=params, headers=headers)response.raise_for_status()response.encoding = response.apparent_encoding# 由于返回的是JSONP數據,所以不能用response.json()來解析content = response.text# 截取JSONP中的JSON數據data = json.loads(content[content.find("{"):content.rfind(")")])if data.get("error_code") == 0:print("張大媽簽到成功!!!總簽到天數:", data.get("data").get("checkin_num"))else:print("簽到失敗,原因:", data.get("error_msg"))except Exception as e:print("張大媽簽到出現錯誤;", e)def main():print("-------------------張大媽簽到開始-------------------")smzdm_sign_in()print("-------------------張大媽簽到結束-------------------")if __name__ == "__main__":main()

    代碼非常簡單,只是用requests模塊發送了一個請求。只要把上面的代碼替換為你自己的cookie和user-agent運行即可

    如果想讓這個腳本每天定時運行,可以把這個腳本放到Linux服務器中,用crond 服務設置一個定時任務,讓它每天定時運行。如果沒有服務器,可以放到手機中運行,裝一個termux APP,后面操作就和服務器差不多了,大家有興趣可以去研究一下,這里就不展開了,我就是這么干的

    五、總結

    優點:

    • 簡單易懂

    不足之處:

    • 沒有對登錄進行處理,不能自動更新cookie,如果cookie過期,這個腳本就會失效
    • 沒有做錯誤處理,如果發生網絡錯誤,服務器錯誤等導致簽到失敗,程序不能及時通知用戶,沒有重復嘗試機制
    • 張大媽的APP簽到和網頁簽到好像是兩個不同的接口,網頁端簽到完成,APP不顯示已簽到,后期可以發掘一下

    總結

    以上是生活随笔為你收集整理的Python爬虫 - 00.实现什么值得买签到的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。