前言
嗨嘍!大家好呀,這里是魔王~
課程亮點:
- 系統分析網頁結構
- 動態數據抓包演示
- json數據解析
- JS解密
環境介紹:
- python 3.8
- pycharm >>> 需要安裝nodejs插件
- Nodejs 解釋器 用來運行JS代碼的
模塊使用:
- requests >>> pip install requests
- execjs >>> pip install pyexecjs
如何安裝python第三方模塊:
- win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
- 在pycharm中點擊Terminal(終端) 輸入安裝命令
如何配置pycharm里面的python解釋器?
- 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
- 點擊齒輪, 選擇add
- 添加python安裝路徑
pycharm如何安裝插件?
- 選擇file(文件) >>> setting(設置) >>> Plugins(插件)
- 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
- 選擇相應的插件點擊 install(安裝) 即可
- 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效
爬蟲案例基本流程:
一. 數據來源分析
- 確定采集網站視頻, 需要什么數據
- 通過開發者工具進行抓包, 分析我們想要的數據 是那個url地址發送的請求
post 請求 >>> 需要提交data表單數據
分析請求參數變化規律, sign 參數, 每次請求都不一樣
第一種方式扣代碼:
- 做JS解密, 其實就扣代碼 我想要sign參數 是哪里來的, 把那一段代碼扣下來
- 運行JS代碼, 運行之后, 肯定是會報錯的 一般情況 什么什么沒有定義, 缺什么補什么
通過python 去調用JS代碼內容 從而得到返回數據內容
第二方式直接用python改寫JS代碼:
二. 代碼實現過程: 發送請求, 獲取數據, 解析數據, 保存數據
- 發送請求, 對于翻譯接口發送請求
- 獲取數據, 獲取服務器返回數據內容
- 解析數據, 提取我們想要翻譯結果
如果想要去做JS解密, 首先就要分析它是那個參數加密的 其次呢 去分析加密參數是通過那個JS代碼生成的,怎么生成的 然后就是扣代碼
JS逆向里面最簡單一個案例...沒有之一
代碼
# 導入數據請求模塊
import requests
# 導入格式化輸出模塊
import pprint
# 導入execjs
import execjs
# 導入md5解密模塊
import hashlib # 內置模塊
# 導入時間模塊
import time
# 1647329439.9328077
# 16473294570110
# 16473295059531
# m3u8 AES加密
while True:
word = input('請輸入你想要翻譯的內容(輸入0即可退出): ')
if word == '0':
break
# f = open('有道.js', encoding='utf-8')
# js_code = f.read()
# compile_code = execjs.compile(js_code)
# json_data = compile_code.call('youdao', word)
string = "fanyideskweb" + word + str(int(time.time() * 10000)) + "Ygy_4c=r#e#4EX^NUGUc5"
sign = hashlib.md5(string.encode('utf-8')).hexdigest()
# print(json_data)
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' # 確定請求網址
# headers 請求頭 偽裝python代碼, 如果你不偽裝, 就被識別出來是爬蟲程序, 從而得不到數據內容
headers = {
'Cookie': 'OUTFOX_SEARCH_USER_ID=1092484940@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=1350964471.5510483; JSESSIONID=aaa_jaG1Fa7rPdutNrm_x; ___rl__test__cookies=1647328160933',
'Host': 'fanyi.youdao.com',
'Origin': 'https://fanyi.youdao.com',
'Referer': 'https://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
}
# 表單數據, post請求都是需要提交一個from data 表單數據
data = {
'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': int(time.time() * 10000),
'sign': sign,
'lts': int(time.time() * 1000),
'bv': 'c2777327e4e29b7c4728f13e47bde9a5',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
response = requests.post(url=url, data=data, headers=headers) # <Response [200]> 200 狀態碼請求成功 響應對象
# response.json() 返回json字典數據 鍵值對取值
translateResult = response.json()['translateResult'][0][0]['tgt']
# pprint.pprint(response.json())
print('翻譯的結果: ', translateResult)
視頻教程
https://www.bilibili.com/video/BV16Y4y1v7D7?share_source=copy_web
尾語
好了,我的這篇文章寫到這里就結束啦!
有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?
喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!