网页抓取 加密html( 【中国空气质量在线监测分析平台】一个收录全国各大城市天气数据网站)
优采云 发布时间: 2022-02-17 10:09网页抓取 加密html(
【中国空气质量在线监测分析平台】一个收录全国各大城市天气数据网站)
中国空气质量在线监测平台加密数据爬取js混淆解密
-中国空气质量在线监测分析平台是一个收录全国主要城市的天气数据网站,包括温度、湿度、PM2.5、AQI等数据, 链接为 :,网站 显示为:
1 判断是否为动态加载 1 搜索不同数据时发现网页地址没有变化 ====== "" 判断为动态加载 2 通过抓包工具获取ajax partial refresh loading 3 发现发送了一个post请求,传递的参数是加密的,响应数据也是加密的。4、请求参数和响应数据需要解密。5.通过火狐浏览器操作后发现他有绑定事件
点进去发现有三个事件
找到 getData() 的定义
getWeatherData()的实现内部检索相关线索:定义了两个变量method='GETDETAIL'和param,param是一个字典,有四个键值对(city、type、startTime、endTime)。还发现了另一个函数调用 getServerData(method, param, callback function, 0.5).
然后谷歌浏览器全局搜索getServerData
发现找到了加密js函数的实现。
6 js代码块加密变成js混淆:我们必须用js去混淆混淆后的数据。
js去混淆:通过这个网站去混淆
将加密数据复制到这个 网站 进行解密
把网站解密代码放到一个js文件里,最后加上
function getPostParamCode(method, city, type, startTime, endTime){
var param = {};
param.city = city;
param.type = type;
param.startTime = startTime;
param.endTime = endTime;
return getParam(method, param); //调用这个函数来解密
}
7 最后写python代码
import execjs
import requests
node = execjs.get()
# Params
method = 'GETDETAIL'
city = '北京'
type = 'HOUR'
start_time = '2018-01-25 00:00:00'
end_time = '2018-01-25 23:00:00'
# Compile javascript
file = 'js.js'
ctx = node.compile(open(file, encoding='utf-8').read())
# Get params
js = 'getPostParamCode("{0}", "{1}", "{2}", "{3}", "{4}")'.format(method, city, type, start_time, end_time)
params = ctx.eval(js)
print(params)
url = 'https://www.aqistudy.cn/apinew/aqistudyapi.php'
pm = {
'd':params
}
#text就是请求到的加密的响应数据
text = requests.post(url,data=pm).text
js = 'decodeData("{0}")'.format(text)
data = ctx.eval(js)
print(data)
查看代码
-->
-中国空气质量在线监测分析平台是一个收录全国主要城市的天气数据网站,包括温度、湿度、PM2.5、AQI等数据, 链接为 :,网站 显示为:
1 判断是否为动态加载 1 搜索不同数据时发现网页地址没有变化 ====== "" 判断为动态加载 2 通过抓包工具获取ajax partial refresh loading 3 发现发送了一个post请求,传递的参数是加密的,响应数据也是加密的。4、请求参数和响应数据需要解密。5.通过火狐浏览器操作后发现他有绑定事件
点进去发现有三个事件
找到 getData() 的定义
getWeatherData()的实现内部检索相关线索:定义了两个变量method='GETDETAIL'和param,param是一个字典,有四个键值对(city、type、startTime、endTime)。还发现了另一个函数调用 getServerData(method, param, callback function, 0.5).
然后谷歌浏览器全局搜索getServerData
发现找到了加密js函数的实现。
6 js代码块加密变成js混淆:我们必须用js去混淆混淆后的数据。
js去混淆:通过这个网站去混淆
将加密数据复制到这个 网站 进行解密
把网站解密代码放到一个js文件里,最后加上
function getPostParamCode(method, city, type, startTime, endTime){
var param = {};
param.city = city;
param.type = type;
param.startTime = startTime;
param.endTime = endTime;
return getParam(method, param); //调用这个函数来解密
}
7 最后写python代码
import execjs
import requests
node = execjs.get()
# Params
method = 'GETDETAIL'
city = '北京'
type = 'HOUR'
start_time = '2018-01-25 00:00:00'
end_time = '2018-01-25 23:00:00'
# Compile javascript
file = 'js.js'
ctx = node.compile(open(file, encoding='utf-8').read())
# Get params
js = 'getPostParamCode("{0}", "{1}", "{2}", "{3}", "{4}")'.format(method, city, type, start_time, end_time)
params = ctx.eval(js)
print(params)
url = 'https://www.aqistudy.cn/apinew/aqistudyapi.php'
pm = {
'd':params
}
#text就是请求到的加密的响应数据
text = requests.post(url,data=pm).text
js = 'decodeData("{0}")'.format(text)
data = ctx.eval(js)
print(data)
查看代码