今天心血来潮,想搞个小工具,方便平时翻译一些英文文档。本来想直接调用某些大厂的翻译接口,但想想还是算,自己动手,丰衣足食嘛于是我就盯上有道在线翻译。
第一步,当然是先打开有道在线翻译的网页。
然后,我习惯性地打开开发者工具(按F12就行),准备看看它的网络请求是怎么搞的。
第二步,在Network找数据包。
我随便输入一个单词 "test",然后就在一堆请求里找找,终于找到一个看起来像是发送翻译请求的包。
仔细一看,这个请求的URL 挺长的,还带一堆参数,看起来有点复杂,但是我发现几次请求参数都没啥变化。
第三步,开始写代码。
我用的是 Python,毕竟这玩意儿写起来快。先导入 requests 库,用来发送网络请求。
import requests
然后,我把刚才找到的那个请求 URL 复制过来,再把请求头(Headers)也复制过来,免得被网站识别出来我是个爬虫。
构造请求数据(data)。
我把那些参数都整理成一个字典,像这样:
- 'i': 要翻译的词
- 'from': 'AUTO'
- 'to': 'AUTO'
- 'smartresult': 'dict'
- 'client': 'fanyideskweb'
- 'salt': 一串数字
- 'sign': 一串字母和数字的组合
- 'lts': 一串数字
- 'bv': 一串字母和数字的组合
- 'doctype': 'json'
- 'version': '2.1'
- 'keyfrom': '*'
- 'action': 'FY_BY_REALTlME'
这些参数是啥意思?不用管它,反正每次请求都一样,直接复制过来用就行。
第四步,发送请求,获取结果。
用 *() 方法发送请求,把 URL、Headers 和 data 都传进去。
response = *(url, headers=headers, data=data)
然后,用 *() 方法把返回的结果转换成 Python 字典。
第五步,提取翻译结果。
我发现翻译结果就藏在这个字典里的一个叫做 'translateResult' 的键里面,然后一层一层剥开,拿到翻译结果的文本
result = *()['translateResult'][0][0]['tgt']
print(result)
我把这些代码整理成一个函数。
以后想翻译什么,直接调用这个函数就行,方便得很。
def youdao_translate(word):
# 请求URL
url = "刚才复制的"
# 请求头
headers = {
"刚才复制的"
# 请求数据
data = {
"刚才复制的"
# 发送请求
response = *(url, headers=headers, data=data)
# 提取翻译结果
result = *()['translateResult'][0][0]['tgt']
return result
搞定!以后再也不用打开网页翻译,直接在 Python 里就能搞定,省时省力,美滋滋。