最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲實(shí)戰(zhàn)JS逆向AES逆向加密爬取

 更新時(shí)間:2021年10月13日 15:04:35   作者:五包辣條!  
一個(gè)建筑行業(yè)的堂哥為了搞一些商業(yè)數(shù)據(jù)前前后后花了1w,辣條我半個(gè)小時(shí)就能解決的事情,這就是技術(shù)的魅力!聲明:爬取是的公開數(shù)據(jù)

爬取目標(biāo)

網(wǎng)址:監(jiān)管平臺(tái)

image.png

工具使用

開發(fā)工具:pycharm

開發(fā)環(huán)境:python3.7, Windows10

使用工具包:requests,AES,json

涉及AES對(duì)稱加密問題 需要 安裝node.js環(huán)境

使用npm install 安裝 crypto-js​

項(xiàng)目思路解析

確定數(shù)據(jù) 在這個(gè)網(wǎng)頁可以看到數(shù)據(jù)是動(dòng)態(tài)返回的 但是 都是加密的 如何確定是我們需要的?

123.png

突然想到 如果我分頁 是不是會(huì)直接加載第二個(gè)頁面 然后查看相似度 找到第一個(gè)頁面, 我真是太聰明了

234.png

數(shù)據(jù)找到了 現(xiàn)在開始尋找加密 但是突然發(fā)現(xiàn)沒有 加密的關(guān)鍵字? 那我們通過url 下手試試 在All里面全局 搜索 query/comp/list(url后面的參數(shù))

345.png

找到這個(gè)接口 鼠標(biāo)右鍵 可以在源代碼查看他

456.png

567.png

678.png

慢慢調(diào)試 中間調(diào)試太多了 我就不一一截圖出來了 跑到這里 發(fā)現(xiàn)data 里面的參數(shù) 和我們看到的加密一致

h(t.data) 加密位置

789.png

進(jìn)去h里面 (鼠標(biāo)光標(biāo)放到 h上面 會(huì)顯示他的 js地址 如果沒有顯示 就是證明你還沒有執(zhí)行到這里 需要在前面打上斷點(diǎn) 刷新頁面調(diào)試)

8910.png

發(fā)現(xiàn)這個(gè)采用AES加密算法 使用模型CBC模式 采用填充方式為 Pkcs7

AES.decrypt() # 參數(shù)說明 秘鑰 模式 偏移值

f  = 'jo8j9wGw%6HbxfFn' # 秘鑰

m = '0123456789ABCDEF' # 偏移值

證明數(shù)據(jù)推導(dǎo)正確 在 return r.toString() 打上斷點(diǎn)

91011.png

r里面數(shù)據(jù)正常返回

簡易源碼分享

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'  # 偏移值
​# 轉(zhuǎn)碼  utf-8?  字節(jié) 16進(jìn)制
m = bytes(m, encoding='utf-8')
f = bytes(f, encoding='utf-8')
​# 創(chuàng)建一個(gè)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]) # 得到最后一個(gè)字符串的ASCII
result = result[0:length - unpadding]
result = json.loads(result)['data']['list'] # dupms json.dumps()  dict  格式 json的
# {"鍵":"值"}
​for i in result:
    print(i)

以上就是Python爬蟲實(shí)戰(zhàn)JS逆向AES逆向加密爬取的詳細(xì)內(nèi)容,更多關(guān)于Python爬取JS逆向AES逆向加密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

文登市| 镇远县| 武穴市| 上犹县| 铜川市| 鹤庆县| 旌德县| 上蔡县| 萨迦县| 丰县| 长岭县| 浦北县| 清河县| 安达市| 苏州市| 五原县| 新营市| 登封市| 榕江县| 梅州市| 玉树县| 武鸣县| 高淳县| 镇沅| 洪洞县| 崇左市| 马鞍山市| 通榆县| 麟游县| 青岛市| 青龙| 荃湾区| 云阳县| 滦平县| 中方县| 上高县| 五大连池市| 武宁县| 雷山县| 乐亭县| 寻乌县|