爬虫 | 基于 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)
相关推荐
databook1 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar2 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780512 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_2 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机9 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机10 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机10 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机10 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i10 小时前
drf初步梳理
python·django
每日AI新事件10 小时前
python的异步函数
python