【Python爬虫】有道翻译新旧API接口

python 有道翻译 api接口 最近有一个调用 "有道词典 api接口" 的需求,就有了如下的代码: # -*-coding:utf-8 -*- ''' @File : youdao.py @Author : HW Shen @Date : 2019/8/5 @Desc : ''' import urllib.parse import http.client import ... 阅读详情

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:Python爬虫 ,一个专注于分享爬虫技巧与案例的专栏~

想看往期历史文章,可以浏览此博文: 历史文章目录,后续所有文章发布都会同步更新此博文~

人生苦短,我用python

前言

自从谷歌翻译用不了之后,一直都在探索其他可用翻译,今天就轮到了我们的 有道翻译。首先来总起评价这个网页的爬虫难度:简单(自从刷了猿人学,这种在我眼中只能被归类为简单了)。

旧API接口

在此之前我也是爬过 有道翻译 的,不过以前是压根没有加密,直接请求就能得到数据,在此放出来:

import requests


def translate_old(text):
    url = 'http://fanyi.youdao.com/translate'
    params = {
        'i': text,
        'doctype': 'json'
    }
    return requests.get(url, params=params).json()


print(translate_old('翻译'))

就拿这个例子执行一下,他返回了:
{'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 1, 'translateResult': [[{'src': '翻译', 'tgt': 'translation'}]]}
,现在来对比一下新的API接口的返回:
{'code': 0, 'dictResult': {'ce': {'word': {'trs': [{'voice': 'translate&type=2', '#text': 'translate', '#tran': '译,翻译;(使)转变,(使)变化;意同,相当于,(把……)解释为;(以易于理解的方式)解释,说明;导致,造成;改编,改写;转换(计算机程序或语言所含的信息);(生)转译(信使RNA中的一组核苷酸);转移,调动,转变;<正式>调换(主教,苏格兰牧师)的教区;<正式>移葬(圣徒遗骸);<文>送(人,尤指活人)进天堂;(物理)平移(主干部分);(数)平移(几何图形);'}, {'voice': 'interpret&type=2', '#text': 'interpret', '#tran': '解释,说明;口译;把……理解为;演绎;'}], 'phone': 'fān yì', 'return-phrase': '翻译'}}}, 'translateResult': [[{'tgt': 'translation', 'src': '翻译', 'srcPronounce': 'fānyì'}]], 'type': 'zh-CHS2en'}
,可见新API的返回相当给力,不管用不用的上,都给你了。
看到别人用着这个,一下子就激发了我征服它的欲望,于是我们开始来爬新API接口吧~

新API接口

打开网页和开发者选项,映入眼帘的是仅仅两个需要攻克的加密部分:
在这里插入图片描述
对比了一下,这个 mysticTime 是请求的时间戳,同步变化的是 sign ,如果此时你 hook 时间:
在这里插入图片描述
然后随便找两个例子翻译一下:
在这里插入图片描述
在这里插入图片描述
你会发现 sign 的值纹丝不动!所以这个 sign 是由时间戳生成无疑了,当然代码也很好找:
在这里插入图片描述
有点多,没事,加个冒号:
在这里插入图片描述
瞬间少了一堆,我们一个个点进去,发现运气真好,第一个就是:
在这里插入图片描述
右击来源中打开,找到这个 sign 打个断点,随便翻译一个就进来了:
在这里插入图片描述
甚至发现他调用的函数就在上方,这是不是太简单了,看不起我呢?
看了一眼 r.a ,默默的获取了它的值:
在这里插入图片描述
这不真巧,用的方法就是 Node 模块 crypto 中的函数:
在这里插入图片描述
同一个 sign 值!简简单单So easy!
然后来看看他的返回值:
在这里插入图片描述
发现他是一长串的加密值,本以为要花一番功夫,然后我瞟了一眼控制台:
在这里插入图片描述
直接把解密入口打印在了控制台!这是得多猖狂才能干的出来,仿佛在跟我说:你过来啊~
都这样了我们怎么也得盘一下它,从控制台点进去:
在这里插入图片描述
打上断点重新给翻译然后点进函数:
在这里插入图片描述
原来仅仅是一段 AES 加密啊,看看他的明文密钥是不是动态的。
刷新几次后,发现他的明文和密文都是固定写死的,也不管他以后会不会变,现在只想 CV 下来。
用 Node 执行一下:
在这里插入图片描述
成功解密,很好,整个翻译API的解密流程就完毕了,对于整个过程,我几乎只有一个动作:CV (手动滑稽~)
之前在处理 execjs 出现 gbk 编码异常时候看到了,每次请求都会新建一个 os.Popen ,而这个是子进程,会比较耗时,所以我们最终的目标,是用纯Python实现它!

新API接口调用的两段JavaScript

先贴上刚才所使用的两段JavaScript代码。
第一段,生成 sign 参数:

const crypto = require('crypto');
const d = "fanyideskweb"
  , u = "webfanyi"
  , m = "client,mysticTime,product"
  , p = "1.0.0"
  , b = "web"
  , f = "fanyi.web";
function v(e) {
    return crypto.createHash("md5").update(e.toString()).digest("hex")
}
function h(e, t) {
    return v(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`)
}
function O(e) {
    const t = (new Date).getTime();
    return {
        sign: h(t, e),
        client: d,
        product: u,
        appVersion: p,
        vendor: b,
        pointParam: m,
        mysticTime: t,
        keyfrom: f
    }
}

第二段,解密返回结果:

const crypto = require('crypto');
const o = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl';
const n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4';
S = (t)=>{
    const a = Buffer.alloc(16, crypto.createHash('md5').update(o).digest());
    const r = Buffer.alloc(16, crypto.createHash('md5').update(n).digest());
    const i = crypto.createDecipheriv("aes-128-cbc", a, r);
    let s = i.update(t, "base64", "utf-8");
    return s += i.final("utf-8")
}

JavaScript解密函数转Python函数

先来看第一段,生成 sign 参数,其实就是一个 md5 生成函数,先生成一个时间戳,添加到指定字符串中并用 md5 加密即可:

import hashlib
time_stamp = str(time.time())
data = {
    'i': text,
    'from': from_,
    'to': to,
    'domain': '0',
    'dictResult': 'true',
    'keyid': 'webfanyi',
    'sign': hashlib.md5(f'client=fanyideskweb&mysticTime={time_stamp}&product=webfanyi&key=fsdsogkndfokasodnaso'.encode('utf-8')).hexdigest(),
    'client': 'fanyideskweb',
    'product': 'webfanyi',
    'appVersion': '1.0.0',
    'vendor': 'web',
    'pointParam': 'client,mysticTime,product',
    'mysticTime': time_stamp,
    'keyfrom': 'fanyi.web'
}

对于第二段有 AES 加密的代码来说,也简单,调用专门的库就可以实现:

text = 'XXX'
key_md5 = hashlib.md5('ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'.encode('utf-8')).digest()
iv_md5 = hashlib.md5('ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'.encode('utf-8')).digest()
print(unpad(AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5).decrypt(base64.urlsafe_b64decode(text)), AES.block_size).decode('utf-8'))

这里的 text 就是我们的API返回结果啦。

完整代码(纯Python实现)

import json
import time
import base64
# import execjs
import hashlib
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad


def translate_old(text):
    url = 'http://fanyi.youdao.com/translate'
    params = {
        'i': text,
        'doctype': 'json'
    }
    return requests.get(url, params=params).json()


session = requests.session()
lastModified = requests.get('https://fanyi.youdao.com/index.html').headers['last-Modified']
_nlmf = int(time.mktime(time.strptime(lastModified, "%a, %d %b %Y %H:%M:%S GMT")))
session.headers = {
    'Referer': 'https://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}
session.get(f'https://rlogs.youdao.com/rlog.php?_npid=fanyiweb&_ncat=pageview&_ncoo=935962676.0432019&_nssn=NULL&_nver=1.2.0&_ntms={time.time()}&_nref=&_nurl=https%3A%2F%2Ffanyi.youdao.com%2Findex.html%23%2F&_nres=1920x1080&_nlmf={_nlmf}&_njve=0&_nchr=utf-8&_nfrg=%2F&/=NULL&screen=1920*1080')


def decrypt(text):
    key_md5 = hashlib.md5('ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'.encode('utf-8')).digest()
    iv_md5 = hashlib.md5('ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'.encode('utf-8')).digest()
    return unpad(AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5).decrypt(base64.urlsafe_b64decode(text)), AES.block_size).decode('utf-8')


def translate(text, from_='auto', to=''):
    time_stamp = str(time.time())
    data = {
        'i': text,
        'from': from_,
        'to': to,
        'domain': '0',
        'dictResult': 'true',
        'keyid': 'webfanyi',
        'sign': hashlib.md5(f'client=fanyideskweb&mysticTime={time_stamp}&product=webfanyi&key=fsdsogkndfokasodnaso'.encode('utf-8')).hexdigest(),
        'client': 'fanyideskweb',
        'product': 'webfanyi',
        'appVersion': '1.0.0',
        'vendor': 'web',
        'pointParam': 'client,mysticTime,product',
        'mysticTime': time_stamp,
        'keyfrom': 'fanyi.web'
    }
    return json.loads(decrypt(session.post('https://dict.youdao.com/webtranslate', data=data).text))


if __name__ == '__main__':
    word = '我多喜欢你,你知道吗?'
    print(translate_old(word)['translateResult'][0][0]['tgt'])
    print(translate(word)['translateResult'][0][0]['tgt'])

至于我这里来为什么要写 lastModified = requests.get('https://fanyi.youdao.com/index.html').headers['last-Modified'] ,就要从我发现 cookie 中必须包含 OUTFOX_SEARCH_USER_ID 这个键值说起,然后我去找了找,发现只有 https://rlogs.youdao.com/rlog.php 这个请求会返回 cookie ,然后发现他的请求中,有个当前毫秒时间戳 _ntms 参数和另外一个不知道桌面生成的 _nlmf 参数,我去查找生成发现他是由 https://shared.ydstatic.com/js/rlog/v1.js 启动的,其中的启动函数:
在这里插入图片描述
从堆栈往上走,发现他是这里面的 lastModified 给的:
在这里插入图片描述
但这个值一直变,而且不是现在的时间戳,我在网址中查看了一下:
在这里插入图片描述
发现有好多的网址的响应头都加了 Last-Modified 参数,不同时间上面还不一样,所以我们也在每次运行前获取一次。

【Python爬虫】有道翻译2023新版 【Python爬虫】使用requests进行获取请求有道URL的结果,MD5加密sign值,AES解密翻译结果 阅读详情

相关推荐

Python利用有道翻译开发API应用示例

这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序。功能简单,但效果却很好。提示:如果想一直用这个可以自己申请一个KEY,申请的过程非常简单的,只要替换原有的KEY_FROM和KEY就可以了。这里要注意的是:有道API的请求频率限制,限制频率为每小时1000次,如果超过限制会被封禁。本贴Python源码是关于。

lmrylll的博客 820

调用有道API实现语音翻译(汉译英)

南旭东,男,西安工程大学电子信息学院,2022级研究生研究方向:机器视觉与人工智能电子邮件:1257571953@qq.com路治东,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组研究方向:机器视觉与人工智能电子邮件:2063079527@qq.com,翻译就是应用程序接口,本质上就是是一些预先定义的函数。

ZHW-鲜橙大AI课题组的博客 3529

JS逆向实战:从有道翻译接口分析到通用爬虫加密参数破解

JS逆向是爬虫与数据采集领域的关键技术,其核心在于通过分析网页前端JavaScript代码,理解并复现数据请求的加密逻辑。这项技术主要应对网站为保护接口而设置的反爬机制,如参数签名、代码混淆和环境检测等。其技术价值在于能够绕过官方API的调用限制,实现稳定、高效的数据获取,广泛应用于翻译工具、内容聚合、电商价格监控及社交媒体数据采集等场景。本文以有道翻译这一经典案例为切入点,详细拆解了sign、salt、bv等关键参数的生成原理,并提供了从抓包定位、算法分析到代码移植的完整实战路径。通过掌握这套方法,开发者

weixin_30292843的博客 313

有道翻译API接口的服务开通与使用Python进行接口调用实例演示,有道智云·AI开放平台

有道翻译 API 接口的服务开通与使用 Python 进行接口调用实例演示 第一章:服务开通 ① 有道智云·AI开放平台【注册】 ② 创建应用,获取【应用密钥和id】 ③ 创建实例,绑定应用 ④ 官方帮助文档 第二章:Python 调用接口实例演示 ① 源码展示 ② 要点讲解 ③ 效果展示

小蓝枣的博客 1万+

有道翻译JS逆向实战:破解Web端加密参数sign与salt生成算法

在Web数据采集和自动化领域,模拟浏览器行为调用API接口是常见需求。其核心原理在于理解前端JavaScript如何对请求参数进行加密和签名,以通过服务器的安全验证。这项技术的关键价值在于能够绕过复杂的客户端防护,实现稳定、高效的自动化数据交互。典型的应用场景包括批量翻译、价格监控和数据聚合等。本文以有道翻译Web端为例,深入剖析其请求参数如sign和salt的生成逻辑,这些参数通常涉及MD5加密和时间戳处理。通过动态调试和代码分析,还原其加密算法,并提供纯Python实现方案,帮助开发者掌握JS逆向的核心

weixin_34253126的博客 701

【Python爬虫 • selenium】selenium4驱动版本兼容性全解析与实战避坑指南

本文深入解析Selenium 4与Selenium 3在驱动版本兼容性上的核心差异,提供Chrome、Firefox、Edge等主流浏览器的实战配置代码对比与避坑指南。文章重点阐述了Selenium库、浏览器与驱动版本之间的“铁三角”关系,并给出详细的排错步骤与生产环境版本锁定策略,帮助开发者彻底解决自动化脚本中的“闪退”等兼容性问题。

weixin_28836989的博客 343

零基础用Python+Requests搭建多语言翻译器(附有道/谷歌API对比)

本文为零基础开发者提供了使用Python Requests库搭建多语言翻译器的完整实战指南。文章详细解析了有道翻译API从旧版到新版的加密演进,并提供了面向对象设计的完整翻译类实现,涵盖异常处理、性能优化及批量文档翻译等实际应用场景,帮助读者构建灵活可控的自动化翻译工具。

ujm567890的博客 1052

JS逆向实战:从零破解a_bogus参数生成算法

在Web安全与数据采集领域,前端参数加密是常见的反爬虫策略。其核心原理是通过JavaScript在客户端对请求参数进行哈希、编码等运算,生成动态令牌(如sign、token),服务端以此验证请求合法性。这项技术能有效防止脚本自动化访问,保障平台数据安全。对于爬虫工程师和Web安全研究者而言,掌握JS逆向技能至关重要,它能将前端加密逻辑还原为可编程算法,实现高效、稳定的自动化数据采集。本文聚焦于实战中常见的a_bogus参数,通过热门的JS逆向技术,详细拆解其生成逻辑,并提供完整的Python还原方案与工程化

weixin_33725239的博客 408

用 Python 写的文档批量翻译工具,效果竟然超越付费软件?

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

时间与思念 1085

Python逆向实战:拆解H5Guard的mtgsig 1.2签名算法

在Web应用安全领域,客户端签名算法是保护接口免受自动化脚本和恶意爬虫攻击的核心技术之一。其原理通常是通过对请求参数、时间戳及环境指纹等要素进行加密和哈希运算,生成一个唯一的令牌(Token),服务端通过验证该令牌的合法性来区分正常用户与异常流量。这项技术的价值在于为数据交互提供了端到端的身份与完整性校验,是构建现代Web应用安全防线的重要环节。典型的应用场景包括大型平台的移动端H5页面、小程序接口以及需要高安全等级的数据传输过程。本文聚焦于逆向工程实践,以大众点评的H5Guard及其mtgsig签名机制为

726

手把手教你用Python处理MAHNOB-HCI多模态数据集(含脑电EEG/眼动/视频数据同步实战)

本文详细介绍了如何使用Python处理MAHNOB-HCI多模态数据集,涵盖脑电(EEG)、眼动追踪和视频数据的同步解析与对齐。通过MNE-Python、pandas和OpenCV等工具,实现从BDF、TSV到XML格式的高效处理,解决时间轴对齐难题,助力情感计算与人机交互研究。

weixin_30998797的博客 367

用 Python 写的文档批量翻译工具,效果竟然超越付费软件?(1)

本需求的核心是翻译,策略是利用网络的翻译 API,这里推荐百度翻译开放平台,不考虑并发数的话可以用标准版,免费使用不限字符量!在使用百度的通用翻译 API 之前需要完成以下工作:使用百度账号登录百度翻译开放平台(http://api.fanyi.baidu.com);注册成为开发者,获得APPID;进行开发者认证(如仅需标准版可跳过);开通通用翻译API服务:开通链接参考技术文档和Demo编写代码完成后在个人页面在即可看到 ID 和密钥,这个很重要!

2301_77118221的博客 538

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2103

2024Python大厂面试集合,用 Python 写的文档批量翻译工具,效果竟然超越付费软件?,手撕面试官

对于字号、加粗、斜体、颜色等样式调整,采取的策略是建立空列表,遍历原文档每一段每一个文字块,获取相应属性并放到各自的列表中,对同一段而言,其包含的文字块属性最多的选项赋值给翻译后文档的对应段落(如同一段全部或大部分的文字是加粗,则翻译后对应段落所有文字块均设置为加粗) 对NLP感兴趣的读者可自行尝试如何高度还原英文文档中某些特定词语的样式修改,并在翻译后的文档中体现出来。完成了上面的内容后,基本需求就完成了。高级需求的难点就是保留格式,简单来说原文档的页面格式和段落格式是什么,翻译后对应的部分就是什么。

2401_84122016的博客 499

智能车竞赛飞檐走壁组立体赛道电磁引导线设计与实现

本文深入解析了智能车竞赛飞檐走壁组立体赛道电磁引导线的核心设计与实现。针对垂直面、圆筒、跷跷板等立体元素,详细阐述了电磁线规格参数选择、三维空间铺设技巧及磁场调试方法,旨在帮助参赛队伍打造稳定可靠的导航系统,提升车模在复杂立体赛道上的通过率与稳定性。

bert9linguist的博客 279

手把手教你解决Kernel panic报错:init找不到的5种排查方法(附NFS挂载实战)

本文深入解析了Linux系统启动时出现“Kernel panic - not syncing: No working init found”报错的根本原因,并提供了五种系统性的排查方法。文章结合NFS挂载根文件系统的实战场景,详细阐述了从动态链接库依赖、内核引导参数、NFS权限配置、文件系统完整性到内核配置干扰的完整排查路径,帮助开发者快速定位并解决这一常见的系统启动故障。

weixin_29159995的博客 192

2024年最全用 Python 写的文档批量翻译工具,效果竟然超越付费软件?,面试资料题

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。我先来介绍一下这些东西怎么用,文末抱走。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。最近我才对这些路线做了一下新的更新,知识体系更全面了。

m0_60707708的博客 899

Virtuoso集成HspiceD:打通模拟设计全流程的仿真与PEX实战

本文详细介绍了Virtuoso集成HspiceD在模拟设计全流程中的应用,包括仿真与PEX实战。通过无缝衔接Virtuoso和HspiceD,设计师可以在同一环境中完成从原理图设计到PEX后仿真的全流程,大幅提升工作效率。文章还提供了仿真环境配置、前仿真关键设置、PEX全流程详解以及性能调优等实用技巧。

weixin_29271263的博客 96

互联网创业核心技术:构建可伸缩的web应用_为什么创业公司要用 Python?

文 | Max Ong Zong Bao译 | EarlGrey推荐 | 编程派公众号(ID:codingpy)为了能够进本地(新加坡)的创业公司,我曾经苦学 Django。刚开始学的时候,就在想都有哪些创业公司在招聘 Python 程序员?当时的我,只知道 Shopee 有在招聘。可惜,后面看到的相关信息很少,只是在我不断地搜寻 AngeList 、Tech in Asia 或 e...

weixin_39818727的博客 156

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

本文为使用 STM32Cube IDE 的 STM32 Blue Pill 入门教程。 在本文中,我们将介绍如何控制 STM32 Blue Pill 的 GPIO 引脚。以及开发环境搭建。 本系列文章将重点介绍采用 ARM Cortex-M 的 BluepellSTM32F103C8 微控制器以及如何使用 STM32CubeIDE 对其进行编程。 STM32CubeIDE是STM32官网提供的IDE

视觉与物联智能 1066

基于BQ25895RTWR的锂电池充电管理硬件设计

BQ25895 是一款适用于单节锂离子电池和锂聚合物电池的高度集成型 5A 开关模式电池充电管理和系统电源路径管理器件。此类器件支持高输入电压快速充电。低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。• 移动电源、移动 Wi-Fi 热点。• 便携式互联网器件。

corlin6688的博客 1085

专栏博文目录

专栏博文目录

qq_39603829的博客 870

基于STM32、HAL库的SC16IS752IPW总线转UART驱动程序设计

/ FIFO空间不足。// 设置LCR寄存器的DLAB位为1以访问DLL/DLH。// 设置LCR寄存器,先访问DLL/DLH。// 设置LCR寄存器(不包含DLAB位)

corlin6688的博客 815

印尼股票列表爬虫实战:Requests+BeautifulSoup绕过动态分页

网页爬虫是获取公开金融数据的基础技术,其核心在于理解目标网站的渲染机制与请求逻辑。对于缺乏标准API的交易所官网(如印尼IDX),需深入分析服务端渲染与客户端分页混合架构,识别CSRF Token传递、AJAX分页参数签名及HTML结构稳定性等关键原理。该技术方案具备高可控性与强可维护性,适用于量化回测、跨境投研与合规尽调等场景,尤其适合需要零成本接入东南亚市场基础标的池的开发者。本文聚焦印尼股票列表、IDX交易所两大热词,提供生产级静态HTML解析与动态内容处理完整路径。

weixin_34129696的博客 391

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python逆向实战:某书x-s/x-s-common签名算法纯Python复现与避坑指南

在数据采集和自动化工具开发中,请求签名算法是保障通信安全与身份验证的核心技术。其原理通常基于哈希函数(如MD5、SHA256)与时间戳、请求参数等动态数据结合,通过特定拼接规则生成唯一摘要,再经Base64编码形成最终签名。这种技术能有效防止请求篡改和重放攻击,在移动端API风控、数据接口保护等场景中广泛应用。本文以某书平台的x-s和x-s-common签名参数为例,深入解析其逆向工程思路与纯Python实现方案,涵盖抓包分析、算法还原、代码实现及常见问题排查,为爬虫工程师和逆向爱好者提供一套可维护、不依赖

weixin_34124651的博客 702

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

基于Taotoken构建统一AI API网关与多项目成本分账实践

在微服务与云原生架构中,API网关作为核心流量入口,承担着路由转发、认证鉴权、流量控制与监控聚合等关键职责。其核心原理是通过统一的接入点,将客户端的复杂请求分发至后端不同的服务实例,实现了解耦与集中治理。这一技术对于构建稳定、可观测的分布式系统具有重要价值,尤其在当前企业广泛集成多种AI大模型服务的场景下,统一的API管理平台能有效解决多模型API密钥分散、调用协议不一、成本难以追溯等痛点。通过引入专门的AI API网关(如Taotoken),开发者可以便捷地实现对所有主流模型服务的统一调度与**成本分账*

450
上一篇: 【猿人学WEB题目专解】猿人学第13题
下一篇: 【猿人学WEB题目专解】猿人学第15题
user_from_future
博客等级 码龄5年 4066粉丝 115原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值