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

歡迎訪問 生活随笔!

生活随笔

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

python

JS逆向解析案例-巨潮证券市场数据库(python)

發布時間:2023/12/18 python 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS逆向解析案例-巨潮证券市场数据库(python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標網址:http://webapi.cninfo.com.cn/#/marketDataZhishu

這篇文章是用來對該網站進行js解析用的,解析完后爬取數據操作可看這篇文章:Scrapy實戰案例--將股票數據存入SQL數據庫

解析重點:

? ? 目標網址在爬取時必須攜帶mcode參數,否則會?出現無授權訪問報錯,而mcode刷新頻率較高,因此在爬取該網站前必須要先通過js逆向來獲取mcode參數。

正文開始:

1、先右鍵點擊審查元素,搜索網頁中需要爬取的數據(找出數據放在哪個包中)

?很明顯在第二個包中,點擊進入,很明顯這個就是我們需要的數據

?2、找到mcode參數所在的位置

此時有三個包,我們不知道是哪一個,我們再精準點搜索給他加個英文字符冒號? 即“mcode:”?

?此時只有一個包了,我們點擊進入,進入后繼續搜索mcode發現,符合條件的太多了

這里我們將路徑作為關鍵詞搜索試試?

?此時只剩下一個了,而且發現了mcode是通過indexcode.getResCode()函數所獲取的

?

?3、斷點調試

鼠標左鍵單機46505這個數字,用來新建一個斷點,建完后刷新一下頁面,此時會出現調試頁面。

??此時剛好就出現了mcode所調用的indexcode.getCode函數,因此我們可以判斷此處是用來產生mcode的一個函數。上面所調用的missjson方法我們不知道是什么,也不需要知道是用來干什么的,將鼠標停留在該函數處進入其對應的位置將其復制下來放在自己電腦的js文件里面。

4、寫入js文件

?將這部分全部復制,寫入到自己電腦的js文件中,注意:此處需要修改為下面這種格式,function必須要放在missjson前面(這與JavaScript的語法有關)

?5、用python讀取js并調試

先觀察發現調用missjson需要先獲得time,獲得這個后我們可以通過execjs的call函數來傳入參數。

''' 通過這個函數獲取mcode var indexcode={getResCode:function(){var time=Math.floor(new Date().getTime()/1000);return window.JSonToCSV.missjson(""+time);} } '''

獲取mcode代碼:

def get_mcode(): # '123.js'是用來放前面的js的with open('123.js','r',encoding='utf-8')as f:read_js=f.read()return_js=execjs.compile(read_js) ## 用來獲取time參數time1 = js2py.eval_js('Math.floor(new Date().getTime()/1000)')mcode = return_js.call('missjson','{}'.format(time1))print(mcode) if __name__ == '__main__':get_mcode()

?6、開始爬取

總結:先復制保存js相對應函數,再獲取mcode,再開始爬取數據

js代碼:

/* 通過這個函數獲取 var indexcode={getResCode:function(){var time=Math.floor(new Date().getTime()/1000);return window.JSonToCSV.missjson(""+time);} } 從這可以知道最終調用了.missjson(""+time) */ // 這里要將函數改一下格式 function missjson(input) {var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";var output = "";var chr1, chr2, chr3 = "";var enc1, enc2, enc3, enc4 = "";var i = 0;do {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)+ keyStr.charAt(enc3) + keyStr.charAt(enc4);chr1 = chr2 = chr3 = "";enc1 = enc2 = enc3 = enc4 = "";} while (i < input.length);return output; }

?python代碼:

# http://webapi.cninfo.com.cn/#/marketDataDate import requests import execjs import js2py def get_mcode():with open('123.js','r',encoding='utf-8')as f:read_js=f.read()return_js=execjs.compile(read_js) ## 用來獲取time參數time1 = js2py.eval_js('Math.floor(new Date().getTime()/1000)')mcode = return_js.call('missjson','{}'.format(time1))return mcodedef get_data(mcode):url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1007'headers = {'mcode': mcode,'Referer': 'http://webapi.cninfo.com.cn/',}params = {'tdate': '2022-04-12','market': 'SZE',}response = requests.get(url=url, headers=headers, params=params).textprint(response) if __name__ == '__main__':mcode = get_mcode()get_data(mcode)

到這一步就對該網站解析完成了,后續用Scrapy爬取數據,文章如下:Scrapy實戰案例--將股票數據存入SQL數據庫

總結

以上是生活随笔為你收集整理的JS逆向解析案例-巨潮证券市场数据库(python)的全部內容,希望文章能夠幫你解決所遇到的問題。

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