Python爬虫,请求参数加密怎么办

本文涉及的产品
全局流量管理 GTM,标准版 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云解析 DNS,旗舰版 1个月
简介: Python爬虫,请求参数加密怎么办

目录

背景介绍:

目标网址:

页面分析:

逆向解析加密参数思路

代码实现:

code_js.js

JS方式实现

python代码实现

总结:

                               我是政胤 期待你的关注


背景介绍:
大家好 我是政胤.

我们在请求接口的时候,发现请求参数数加密的,该如何处理呢?今天介绍两种方式完成请求参数解密,一种是通过调试js,逆向解析的方式,另一种是Python方式实现解析请求参数。

目标网址:
https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1
页面分析:
确定数据接口地址

确定请求头和请求参数有没有加密

确定返回的数据是不是加密

逆向解析加密参数思路
定位到加密参数所在哪个js文件

在来源面板中打开js

确定加密参数所在位置

打断点,刷新页面

确定getApiKey方法的位置

改写js

补全js代码,并改成成函数

运行js

代码实现:
code_js.js
function getApiKey() {

var t = (new Date).getTime()
  , e = encryptApiKey();
return t = encryptTime(t),
comb(e, t)

}
// encryptApiKeya
function encryptApiKey() {

var t = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
  , e = t.split("")
  , r = e.splice(0, 8);
return e.concat(r).join("")

}
// encryptApiKey
function encryptTime(t) {

var e = (1 * t + 1111111111111).toString().split("")
  , r = parseInt(10 * Math.random(), 10)
  , n = parseInt(10 * Math.random(), 10)
  , o = parseInt(10 * Math.random(), 10);
return e.concat([r, n, o]).join("")

}
// comb
function comb(t, e) {

var r = "".concat(t, "|").concat(e);
return btoa(r)

}

// 调用函数运行
// console.log(getApiKey())

JS方式实现
import requests
import json
import execjs
from jsonpath import jsonpath
import time

第一页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362656709&limit=20&offset=0

第二页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362632969&limit=20&offset=20

第三页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362567236&limit=20&offset=40

第四页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362796076&limit=20&offset=60

def parse(offset):

## 目标地址:'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1'
with open('./code_js.js', 'r', encoding='utf-8') as f:
    js_code = f.read()
# compile 调用文件,call 调用getApiKey函数
apiKey = execjs.compile(js_code).call('getApiKey')
# print(apiKey)
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    'x-apiKey': apiKey
}
# t 是当前时间的数据戳
t = str(time.time() * 1000)[:-5]
# print(t)
data = {
    't': t,
    'limit': 20,
    'offset': offset
}
# 数据接口地址
url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict'
res = requests.get(url, headers=header, params=data).text
# json字符串数据,转为python字典数据
dict_data = json.loads(res)
# print(json_data)
# 数据提取
# 交易哈希
hash_list = jsonpath(dict_data, "$..hash")
# 所在区块
blockHeight_list = jsonpath(dict_data, "$..blockHeight")
# 数量(BTC)
inputsValue_list = jsonpath(dict_data, "$..inputsValue")
# 手续费(BTC)
fee_list = jsonpath(dict_data, "$..fee")
print(hash_list, blockHeight_list, inputsValue_list, fee_list)

爬取3页

for i in range(1, 4):

print(f'正在爬取第{i}页')
offset = (i - 1) * 20
parse(offset)

python代码实现
import base64
import random

import requests
import json
from jsonpath import jsonpath
import time

def getApiKey():

# 13位的时间戳
t = int(str(time.time() * 1000)[:-5])
e = encryptApiKey()
# print('t的值', e)
t = encryptTime(t)
# print('e的值', t)
return comb(e, t)

def encryptApiKey():

t = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
# e是t后28个字符组成的列表
e = [j for j in t[8:]]
# r是前8个字符组成的列表
r = [j for j in t[:8]]
# 返回值就是 e拼接r组成的字符串
e.extend(r)
return ''.join(e)

def encryptTime(t):

# e 为 (1 * t + 1111111111111)的结果转为字符串的每个字符组成的列表
e = [j for j in str(1 * t + 1111111111111)]
#  r、n、o 为 随机数字(0-9)
r = str(random.randint(0, 9))
n = str(random.randint(0, 9))
o = str(random.randint(0, 9))
# 返回的结果是 e,r, n, o 拼接后的字符串
e.extend(list(r + o + n))
return ''.join(e)

def comb(t, e):

# r 是t 和"|" 和e 拼接之后的字符串
r = t + '|' + e
# 返回的是base64编码的字符串
return base64.b64encode(r.encode()).decode()

def parse(offse):

apikey = getApiKey()
print(apikey)
# print(apiKey)
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    'x-apiKey': apikey
}
# t 是当前时间的数据戳
t = str(time.time() * 1000)[:-5]
# print(t)
data = {
    't': t,
    'limit': 20,
    'offset': offse
}
# 数据接口地址
url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict'
res = requests.get(url, headers=header, params=data).text
# json字符串数据,转为python字典数据
dict_data = json.loads(res)
# print(json_data)
# 数据提取
# 交易哈希
hash_list = jsonpath(dict_data, "$..hash")
# 所在区块
blockHeight_list = jsonpath(dict_data, "$..blockHeight")
# 数量(BTC)
inputsValue_list = jsonpath(dict_data, "$..inputsValue")
# 手续费(BTC)
fee_list = jsonpath(dict_data, "$..fee")
print(hash_list, blockHeight_list, inputsValue_list, fee_list)

爬取3页

for i in range(1, 3):

print(f'正在爬取第{i}页')
offset = (i - 1) * 20
parse(offset)

总结:
通过这个案例,我们可以知道怎样确定数据接口地址,怎样确定加密参数所在哪个js文件以及了解js调试过程。通过调试js逆向解析的方式和Python方式均可实现请求参数解析。python实现的原理就是将js的写函数用python的方式来写。

                               我是政胤 期待你的关注

目录
相关文章
|
1月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
6天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
18天前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
61 3
|
29天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
30天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
1月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
1月前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
2月前
|
数据采集 JavaScript 前端开发
Python爬虫能处理动态加载的内容吗?
Python爬虫可处理动态加载内容,主要方法包括:使用Selenium模拟浏览器行为;分析网络请求,直接请求API获取数据;利用Pyppeteer控制无头Chrome。这些方法各有优势,适用于不同场景。

热门文章

最新文章