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

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


目录

一、项目功能

二、注意事项

三、代码解析

1. 导入必要的库

2. 设置请求头部信息

3. 获取用户输入

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

5. 计算签名

6. 构造请求数据

7. 发送 POST 请求

8. 解析响应并输出结果

四、结果展示

五、完整代码


一、项目功能

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

二、注意事项

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

三、代码解析

1. 导入必要的库

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

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

2. 设置请求头部信息

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

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 的变量中。

key = input("请输入你要翻译的单词:")

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

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

lts = str(int(time.time() * 100))
salt = lts + str(random.randint(0, 9))

5. 计算签名

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

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 等信息。

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 变量中。

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

8. 解析响应并输出结果

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

print(response.text)

四、结果展示


五、完整代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import requests
import time
import random
from hashlib import md5headers = {'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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DC-9渗透测试复现

DC-9渗透测试复现 目的: 获取最高权限以及flag 过程: 信息打点--sql注入- 文件包含漏洞-Knockd开门开启ssh连接-hyjra爆破-sudo提权(文件追加) 环境: 攻击机:kali(192.168.85.137) 靶机:DC_3(192.168.85.141) …

javaswing + mysql通讯录

javaswingaddressbook 需要代码私聊

结构体及应用;结构体指针及应用;union、enum、typedef三个关键字

结构体及应用 参考文章链接:https://blog.csdn.net/zw1996/article/details/53844585结构体的声明 结构体的初始化 注意如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了。 /这样是可以的,在定义变量的时候就初始化了…

(十四)C++自制植物大战僵尸游戏windows平台视频播放实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs VLC库 在Cocos2d-x游戏开发框架中,没有实现windows平台视频播放的功能,需要自定义实现。在本项目中使用vlc库实现windows平台的视频播放功能。 vlc官网:网址 下载完成后&#x…

虚幻引擎源码版安装下载,点击GenerateProjectFiles.bat报错 error NU1101NuGet包问题解决参考方案

开发环境配置与源码安装使用 安装VS2022 按照官方文档安装需要的vs配置 虚幻引擎源代码下载 Epic里面下载的引擎与源代码引擎区别:Epic里面下载的引擎是已经编译过的它的源代码访问权限不完整,源代码版本提供比较完整引擎代码,并且可以修…

MDK stm32怎么生成bin文件

第一种 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe --bin -o ../../Output/atk_f407.bin ../../Output/atk_f407.axf 空格解析 D:\Keil_v5\ARM\ac5.6\bin\fromelf.exe一个空格--bin一个空格-o两个空格../../Output/atk_f407.bin ../../Output/atk_f407.axf (注意后…

ELK,ELFK日志收集分析系统

ELK简介 ELK是一套完整的日志集中处理解决方案,将ElasticSearch,Logstash和Kibana三个开源工具配合使用,实现用户对日志的查询、排序、统计需求。 ELK工作原理 在所有需要收集日志的服务器上部署Logstash,或者先将日志进行集中…

c# .net 香橙派 Orangepi GPIO高低电平、上升沿触发\下降沿触发 监听回调方法

c# .net 香橙派GPIO高低电平、上升沿触发\下降沿触发 监听回调方法 通过gpio readall 查看 gpio编码 这里用orangepi zero3 ,gpio= 70为例 当gpio 70 输入高电平时,触发回调 c# .net 代码 方法1: Nuget 包 System.Device.Gpio ,微软官方库对香橙派支持越来越好了,用得…

SpringBoot多数据源(二)

SpringBoot多数据源AbstractRoutingDataSource(二) 1.多数据源配置2.多数据源调用流程3.实现 1.多数据源配置 spring-jdbc模块提供AbstractRoutingDataSource,其内部可以包含了多个DataSource, 然后在运行时来动态的访问数据库 2.多数据源…

【Python系列】查看虚拟环境信息和包大小

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java基于SpringBoot+Vue的蜗牛兼职网系统的研究与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

CSS-布局

display display 属性是用于控制 布局 的最重要的 CSS 属性。display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值,具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。 block block:块级元素。块级…

越来越多服务区安装智慧公厕是什么原因

随着社会的不断发展,人们对生活质量的要求也越来越高。在这种背景下,越来越多的服务区开始安装智慧公厕,以满足人们在出行过程中的生活需求。那么,为什么越来越多的服务区选择安装智慧公厕呢?这其中究竟有哪些原因呢&a…

你信不信,五分钟快速学习Nginx

Nginx是什么? Nginx 是一个高性能的HTTP和反向代理服务器。它是由俄罗斯程序员Igor Sysoev开发的,最初是为了解决俄罗斯大型的门户网站的高流量问题。 说到反向代理,那么有没有正向代理呢? 正向代理:客户端非常明确要…

Swift Publisher 5 for mac:打造精美版面

Swift Publisher 5 for mac:打造精美版面 Swift Publisher 5是一款专业的版面设计和编辑工具,为Mac用户提供了强大的设计功能和直观的操作界面。以下是关于Swift Publisher 5的功能介绍: 直观易用的界面:用户能够轻松地使用Swift …

每日两题 / 189. 轮转数组 560. 和为 K 的子数组(LeetCode热题100)

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 向右轮转将使尾部k个元素顶到头部 将整个数组反转&#xff0c;再分别反转前k个元素和剩下的元素即可 class Solution { public:void rotate(vector<int>& nums, int k) {k % nums.size();reverse(nums.begi…

C# 自动填充文字内容到指定图片

目录 需求 开发运行环境 方法设计 实现代码 AddText方法 图片转Base64 调用示例 小结 需求 在我们的一些发布系统项目应用中&#xff0c;会经常发布一些链接图标&#xff0c;该图标基本上以模板背景为主&#xff0c;并填充项目文字内容。解决方式一般会让美工进行制作…

Qt 拖放功能详解:理论与实践并举的深度指南

拖放&#xff08;Drag and Drop&#xff09;作为一种直观且高效的用户交互方式&#xff0c;在现代图形用户界面中扮演着重要角色。Qt 框架提供了完善的拖放支持&#xff0c;允许开发者在应用程序中轻松实现这一功能。本篇博文将详细阐述Qt拖放机制的工作原理&#xff0c;结合详…

代码随想录阅读笔记-回溯【N皇后】

题目 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案&#xff0c;该方案中 Q 和 . 分别代表…

【2024】使用Rancher管理k8s集群和创建k8s集群

Rancher管理k8s集群及创建k8s集群。 Rancher版本为:2.8.2目录 rancher管理k8s集群rancher创建k8s集群rancher管理k8s集群 使用rancher管理已经存在的k8s集群。 本部分内容需要自行准备好k8s集群及rancher平台,部署请看本人其他文章 。 登录到rancher平台后,点击集群管理,…