爬虫 | 基于 Python 实现有道翻译工具

Hi,大家好,我是半亩花海。本项目旨在利用 Python 语言实现一个简单的有道翻译工具 。有道翻译是一款常用的在线翻译服务,能够实现多种语言的互译,提供高质量的翻译结果。


目录

一、项目功能

二、注意事项

三、代码解析

[1. 导入必要的库](#1. 导入必要的库)

[2. 设置请求头部信息](#2. 设置请求头部信息)

[3. 获取用户输入](#3. 获取用户输入)

[4. 生成加密所需的时间戳和盐值](#4. 生成加密所需的时间戳和盐值)

[5. 计算签名](#5. 计算签名)

[6. 构造请求数据](#6. 构造请求数据)

[7. 发送 POST 请求](#7. 发送 POST 请求)

[8. 解析响应并输出结果](#8. 解析响应并输出结果)

四、结果展示

五、完整代码


一、项目功能

  1. 用户输入要翻译的单词或短语。
  2. 程序通过 HTTP 请求向有道翻译服务发送请求,获取翻译结果。
  3. 解析服务器返回的 JSON 数据,提取翻译结果并显示给用户。

二、注意事项

  • 需要在代码中填写有效的 Cookie 信息,否则请求可能被拒绝。
  • 需要确保网络连接畅通,否则无法发送请求和接收响应。

三、代码解析

1. 导入必要的库

导入了需要使用的库,包括发送 HTTP 请求的 requests 库生成时间戳的 time 库生成随机数的 random 库 以及进行MD5 加密的 hashlib 库中的 md5 函数

python 复制代码
import requests  # 用于发送 HTTP 请求和接收响应
import time      # 用于生成时间戳
import random    # 用于生成随机数
from hashlib import md5  # 用于进行 MD5 加密

2. 设置请求头部信息

定义了请求头部信息的字典,包括 Cookie、Host、Origin、Referer 和 User-Agent 等字段,用于模拟浏览器发送请求。

python 复制代码
headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=-690213934@10.108.162.139; OUTFOX_SEARCH_USER_ID_NCOO=1273672853.5782404; fanyi-ad-id=308216; fanyi-ad-closed=1; ___rl__test__cookies=1659506664755',
    'Host': 'fanyi.youdao.com',
    'Origin': 'https://fanyi.youdao.com',
    'Referer': 'https://fanyi.youdao.com/',
    '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'
}

3. 获取用户输入

通过 input() 函数获取用户输入的要翻译的单词或短语,并将其存储在名为 key 的变量中。

python 复制代码
key = input("请输入你要翻译的单词:")

4. 生成加密所需的时间戳和盐值

使用**time.time()** 获取当前时间戳,乘以 100 并转换为字符串,生成时间戳 lts ;然后使用 random.randint() 生成一个随机数,并与时间戳拼接成盐值 salt

python 复制代码
lts = str(int(time.time() * 100))
salt = lts + str(random.randint(0, 9))

5. 计算签名

根据有道翻译的签名算法,构造签名所需的字符串 sign_data ,包括固定字符串、待翻译的单词、盐值和固定字符串。然后使用**md5() 函数** 对 sign_data 进行加密 ,并将结果转换为十六进制字符串,得到签名 sign

python 复制代码
sign_data = 'fanyideskweb' + key + salt +'Ygy_4c=r#e#4EX^NUGUc5'
sign = md5(sign_data.encode()).hexdigest()

6. 构造请求数据

构造了一个包含翻译所需参数的字典 data ,包括翻译文本 i源语言 from目标语言 to、smartresult、client、salt、sign、lts、bv、doctype、version、keyfrom 和 action 等信息。

python 复制代码
data = {
    'i': key,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': salt,
    'sign': sign,
    'lts': lts,
    'bv': 'f0819a82107e6150005e75ef5fddcc3b',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME',
}

7. 发送 POST 请求

使用**requests.post()** 方法发送POST 请求 ,参数包括请求地址 url请求头部信息 headers请求数据 data,并将响应 保存在 response 变量中。

python 复制代码
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
response = requests.post(url, headers=headers, data=data)

8. 解析响应并输出结果

输出了服务器返回的 JSON 格式 的数据,其中包含翻译结果

python 复制代码
print(response.text)

四、结果展示


五、完整代码

python 复制代码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import requests
import time
import random
from hashlib import md5

headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=-690213934@10.108.162.139; OUTFOX_SEARCH_USER_ID_NCOO=1273672853.5782404; fanyi-ad-id=308216; fanyi-ad-closed=1; ___rl__test__cookies=1659506664755',
    'Host': 'fanyi.youdao.com',
    'Origin': 'https://fanyi.youdao.com',
    'Referer': 'https://fanyi.youdao.com/',
    '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'
}
key = input("请输入你要翻译的单词:")
lts = str(int(time.time() * 100))
salt = lts + str(random.randint(0, 9))
sign_data = 'fanyideskweb' + key + salt +'Ygy_4c=r#e#4EX^NUGUc5'
sign = md5(sign_data.encode()).hexdigest()
data = {
    'i': key,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    # 时间戳  1970  秒
    'salt':salt,
    # 加密
    'sign': sign,
    # 时间戳
    'lts': lts,
    # 加密的数据
    'bv': 'f0819a82107e6150005e75ef5fddcc3b',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME',
}

# 获取到资源地址
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
response = requests.post(url, headers=headers, data=data)
print(response.text)
相关推荐
心中有国也有家1 小时前
GE图引擎深度解析——CANN的计算图优化与执行引擎
人工智能·pytorch·python·学习·numpy
卷毛的技术笔记2 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥2 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog2 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008112 小时前
FastAPI APIRouter
开发语言·python
Benszen2 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆2 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木2 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r2 小时前
Java调用链MCP分析工具
java·python·ai编程
杨充3 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法