1. 程式人生 > 其它 >【原創】Python 特來電充電站資料爬蟲

【原創】Python 特來電充電站資料爬蟲

本文僅供學習交流使用,如侵立刪!

特來電充電站資料爬蟲

操作環境

  • win10 、 mac
  • Python3.9
  • requests、Crypto、multiprocessing

分析

需求1:城市內所有站點列表
aHR0cHM6Ly9zZy50ZWxkLmNuL2FwaS9pbnZva2U/U0lEPUFBUy1BcHAwNDA3X1NlYXJjaFN0YXRpb24=

需求2:站點詳情資訊
aHR0cHM6Ly9zZy50ZWxkLmNuL2FwaS9pbnZva2U/U0lEPUFBUy1BcHAwNDA3X0dldFN0YXRpb25EZXRhaWxz

需求3:站點充電樁資訊
aHR0cHM6Ly9zZy50ZWxkLmNuL2FwaS9pbnZva2U/U0lEPUJhc2VBcGktQXBwMDMwNF9HZXRUZXJtaW5hbE9mU3RhdGlvbg==

總體來說資料介面還是很容易zhua到的,關鍵點是有兩個加密引數使用的DES加密:
X-token:有效期 15分鐘
AVER: 有效期 十秒
特來電使用了360殼,直接脫殼分析拿到key和iv根據時間戳生成即可

JS生成AVER

# 篇幅過長這兒只貼出關鍵點程式碼,拿到key和iv後使用工具自動生成還原始碼即可
function DES_Encrypt(word) {
    var srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.DES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

function DES_Decrypt(word) {
    var srcs = word;
    var decrypt = CryptoJS.DES.decrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypt.toString(CryptoJS.enc.Utf8);
}

python 生成AVER

def get_AVER(self):
    """
    根據時間戳生成加密引數AVER
    """
    ats = str(int(time.time()))
    cipher = DES.new(key.encode(), DES.MODE_CBC, iv.encode())
    data = pad(ats.encode('utf8'), 16, style='pkcs7')
    encryptedbytes = cipher.encrypt(data)
    res = str(base64.b64encode(encryptedbytes), "utf-8")
    self.ATS = ats
    self.AVER = res
    # print('生成加密引數:AVER')
    # print(f'時間戳:{self.ATS} 加密後:{self.AVER}')

業務邏輯方面的程式碼就不貼了,根據實際業務寫就可以

效果


資源下載

https://download.csdn.net/download/qq_38154948/85450571


本文僅供學習交流使用,如侵立刪!