本次博客分享的内容为基于有道在线翻译实现一个实时翻译小程序,本次任务是参考小甲鱼的书《零基础入门学习Python》完成的,书中代码对于当前的有道词典并不适用,使用后无法实现翻译功能,在网上进行学习之后解决了这一问题。
2、前置工作
1)由于有道在线翻译是“反爬虫”的,所以在编写该程序的时候需要使用到User-Agent,通过使用request模块中的headers参数,对它进行适当的设置就可以将程序访问伪装为浏览器访问,有两种方法可以添加headers参数,我使用的方法是通过add_header()方法往Request对象中添加headers参数;
2)我使用的是360浏览器,获取它User-Agent的方法是在地址栏中输入about:version即可,结果如下图:
3)在获得该参数后还需要获取有道翻译的data数据,首先先打开有道翻译界面,然后打开其审查元素,点击netwoek,然后在翻译框内输入word点击翻译,找到如下图所示的位置:
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" #有道翻译的网址 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,爬虫,翻译小程序
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]