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)相关推荐
- JS逆向解析---某知名小说网站内容加密
该小说网站的全部内容都是经过一个JS的加密,要想爬取这个网站那么将其内容解析是不可避免的,本文将讲解如何对其进行JS的逆向解析.网站:shuqi 随便点开一本书,打开浏览器自带的抓包工具: 点击第一个 ...
- Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)
关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...
- 淘宝直播h5页面js逆向解析
最近公司需要爬取直播商品的一些数据,其中就有淘宝直播. 分析淘宝直播app 很显然,直接搞难度很大,想到找h5页面,半天没找见:然后搞淘宝直播app,先抓包,请求尝试: import requests ...
- 某壁纸网站JS逆向+混淆代码扣取AST修复+Python批量下载教程+完整代码
由于内容相对较多,无限debugger.JS逆向.混淆代码扣取修复.Python爬虫,篇幅较长,文字教程就不提供了, 完整python代码 # -*- coding: utf-8 -*- # @Aut ...
- js逆向解析技巧--selenium
由于工作后期偏向架构方向,很久没做单独的爬取操作,居然有点忘记js的逆向过程了,研究了一晚上终于有了点头绪,记录下来免得以后忘记. 下面内容以对美团店铺抓取时需要破解的_token加密为准. 1. c ...
- Scrapy实战案例--抓取股票数据并存入SQL数据库(JS逆向)
目标网址:http://webapi.cninfo.com.cn/#/marketDataZhishu 之前在这篇文章里面对该网站的JS进行了一个逆向的解析:JS逆向解析案例 接下来我们来创建一个Sc ...
- JS逆向之巨量创意signature签名
文章目录 目标网站 接口分析 定位_signature生成位置 补环境还原js 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...
- JS逆向之巨量星图sign签名
文章目录 1. 目标网站 2. 初步抓包分析 3. 定位加密参数生成位置 4. 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...
- js逆向--有道翻译
目录 1.前言 2.起因 3.经过 4.结果 1.前言 分类:js逆向 语言:python 2.起因 记录一下js逆向入门案例 3.经过 分析案例,有道翻译是通过ajax的post请求获得的响应结果, ...
- Python爬虫从入门到精通:(43)JS逆向:完美世界RAS逆向_Python涛哥
完美世界有很多游戏,比较出名的就是诛仙.魔兽世界等.完美今天就来看下完美世界登陆的逆向分析! JS逆向解析 登陆的时候这里有个点击认证.没关系,完美先忽略它,直接点击.完美主要探讨密码的逆向方式. 抓 ...
最新文章
- 使程序变为后台运行代码
- mysql 5.6 双向互备_mysql双主互备
- 学习Pygame和巩固Python——画颜色~
- 最美的Linux中文版的吗,号称最美的Linux发行版——Elementary OS
- 一个线性几何不等式猜想
- boost::smart_ptr模块collector相关的测试程序
- centos6 图形界面root免密直接登录问题
- 每天一道LeetCode-----比较两个字符串,每个字符串被若干'.'分成多个数字,一个个比较
- 两种删除internal table entry的性能比较
- android 怎么获取app 字体颜色,android app 修改字体
- 基于逻辑回归算法模型搭建思路
- 教练级导师带你打5场AI大赛,还有奖金5万元的工业级AI实战赛等你来战!
- (渝粤教育)网络教育远程教育统考计算机应用基础复习题
- 用户画像、用户分群、用户分层,到底有啥区别?
- 安卓手机软件性能测试,四款安卓公交查询软件基本性能测试
- 作为一个程序员,至少需要掌握哪几种编程语言?
- php 月柱计算,月柱推算
- android 微信好友,朋友圈分享
- 交通期刊JCR(2020)
- 一文搞定hive之insert into 和 insert overwrite与数据分区