Python爬蟲實戰JS逆向AES逆向加密爬取
爬取目標
網址:監管平臺
工具使用
開發工具:pycharm
開發環境:python3.7, Windows10
使用工具包:requests,AES,json
涉及AES對稱加密問題 需要 安裝node.js環境
使用npm install 安裝 crypto-js
項目思路解析
確定數據 在這個網頁可以看到數據是動態返回的 但是 都是加密的 如何確定是我們需要的?
突然想到 如果我分頁 是不是會直接加載第二個頁面 然後查看相似度 找到第一個頁面, 我真是太聰明瞭
數據找到瞭 現在開始尋找加密 但是突然發現沒有 加密的關鍵字? 那我們通過url 下手試試 在All裡面全局 搜索 query/comp/list(url後面的參數)
找到這個接口 鼠標右鍵 可以在源代碼查看他
慢慢調試 中間調試太多瞭 我就不一一截圖出來瞭 跑到這裡 發現data 裡面的參數 和我們看到的加密一致
h(t.data)
加密位置
進去h裡面 (鼠標光標放到 h上面 會顯示他的 js地址 如果沒有顯示 就是證明你還沒有執行到這裡 需要在前面打上斷點 刷新頁面調試)
發現這個采用AES加密算法 使用模型CBC模式 采用填充方式為 Pkcs7
AES.decrypt() # 參數說明 秘鑰 模式 偏移值
f = ‘jo8j9wGw%6HbxfFn’ # 秘鑰
m = ‘0123456789ABCDEF’ # 偏移值
證明數據推導正確 在 return r.toString() 打上斷點
r
裡面數據正常返回
簡易源碼分享
import requests from Crypto.Cipher import AES import json url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=2&pgsz=15&total=0' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38' } response = requests.get(url, headers=headers).text f = 'jo8j9wGw%6HbxfFn' # 秘鑰 m = '0123456789ABCDEF' # 偏移值 # 轉碼 utf-8? 字節 16進制 m = bytes(m, encoding='utf-8') f = bytes(f, encoding='utf-8') # 創建一個AES算法 秘鑰 模式 偏移值 cipher = AES.new(f, AES.MODE_CBC, m) # 解密 decrypt_content = cipher.decrypt(bytes.fromhex(response)) result = str(decrypt_content, encoding='utf-8') # OKCS7 填充 length = len(result) # 字符串長度 unpadding = ord(result[length - 1]) # 得到最後一個字符串的ASCII result = result[0:length - unpadding] result = json.loads(result)['data']['list'] # dupms json.dumps() dict 格式 json的 # {"鍵":"值"} for i in result: print(i)
以上就是Python爬蟲實戰JS逆向AES逆向加密爬取的詳細內容,更多關於Python爬取JS逆向AES逆向加密的資料請關註WalkonNet其它相關文章!