Python实现有道在线翻译爬虫:绕过反爬机制与代码详解

橘子海
橘子海
发布时间:2026-10-13| 6人浏览过
原创

本文详解如何使用Python编写有道在线翻译小程序。针对有道反爬机制,重点讲解User-Agent伪装、Referer设置及data参数构造(含salt与sign生成)。提供完整Python代码,涵盖urllib、json、time及hashlib模块的应用,并分析运行结果,帮助开发者解决旧版教程失效问题。

Python有道翻译爬虫开发背景

本次博客分享基于有道在线翻译接口开发实时翻译小程序的经验。该任务参考了小甲鱼所著《零基础入门学习Python》一书,但书中提供的代码因有道词典接口更新已无法直接使用。经过网络资料检索与调试,成功解决了翻译功能失效的问题,现将解决方案整理如下。

前置准备工作与反爬机制应对

2、前置工作

1)有道在线翻译设有反爬虫机制,因此程序必须模拟浏览器行为。通过Python的request模块设置headers参数,可将程序访问伪装为正常浏览器请求。添加headers参数主要有两种方式,本文采用通过add_header()方法向Request对象追加headers参数的方案。

2)以360浏览器为例,获取User-Agent的方法是在地址栏输入about:version即可查看,具体结果参考下图:

3) 获取参数后,还需提取有道翻译的data数据。首先打开有道翻译页面,启用浏览器审查元素功能,切换到Network标签页。在翻译框输入任意词汇并点击翻译,随后在请求列表中找到对应的请求项,位置如下图所示:

4)向下滚动列表即可找到data参数,编程时的数据构造需严格参照此处格式,具体配置见下图:

此外,headers中所需的Referer及User-Agent字段也可在上述图片中直接获取。

核心代码实现与模块解析

3、任务代码

程序编写涉及多个Python标准库,主要包括urllib、json、time等模块。

urllib已在上一篇博客中介绍,它是一个高级Web交互库,核心功能是模拟Web浏览器等客户端发起资源请求,并返回类文件对象。

json是一种轻量级数据交换格式,便于阅读与编写。程序中需使用json.loads函数对返回的json数据进行解码处理。

time模块用于获取当前时间戳及控制数据提交的延迟。虽然增加延迟会降低运行效率,但能有效降低IP地址被网站屏蔽的风险。

具体实现代码如下所示:


import urllib.request #导入urllib.request库
import urllib.parse #导入urllib.parse库
import json #导入json库
import time #导入time库
import random #导入random库
import hashlib #导入hashlib库
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" #有道翻译的网址
while True: #定义死循环
 fanyi = input("请输入想要翻译的内容:") #用户输入想要翻译的内容
 #设置API接口
 a = 'fanyideskweb'   #设置client
 b = fanyi    #需要翻译的内容
 c = str(int(time.time() * 1000)+ random.randint(1, 10)) #当前时间戳
 d = 'rY0D^0\'nM0}g5Mm1z%1G4'   #加密字符
 sign = hashlib.md5((a +b +c + d).encode('utf - 8')).hexdigest() #根据内容进行md5加密
 #设置data,按照网页审查元素设置即可
 data = {}
 data['i'] = fanyi
 data['from'] = 'AUTO'
 data['to'] = 'AUTO'
 data['smartresult'] = 'dict'
 data['client'] = 'fanyideskweb'
 data['salt'] = c
 data['sign'] = sign
 data['doctype'] = 'json'
 data['version'] = '2.1'
 data['keyform'] = 'fanyi.web'
 data['action'] = 'FY_BY_CLICKBUTTION'
 data['typoResult'] = 'true'
 data = urllib.parse.urlencode(data).encode('utf - 8') #urlencode转换data数据并编码为utf-8码
 req = urllib.request.Request(url, data)  #指定网页,包含url、data和head
 #伪造浏览器访问
 req.add_header('Referer','http://fanyi.youdao.com')
 req.add_header('User - Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE')
 response = urllib.request.urlopen(req)  #post方式打开指定网页
 html = response.read()   #读取网页信息
 html = html.decode('utf - 8')  #将utf-8码解码为unicode码
 target = json.loads(html)   #把json页面转换为一个字典
 print("翻译结果: %s" % (target['translateResult'][0][0]['tgt'])) #输出
 time.sleep(5) #延迟提交数据

程序运行结果如下图所示:

开发总结与心得

4、总结

书本知识需通过实际编码验证。动手实践至关重要,本次翻译小程序的开发因原书代码失效,促使我通过网络查阅资料解决技术难题,在此过程中积累了宝贵经验。希望读者能以此为鉴,持续精进技术。

以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。