python 3.X urllib工具库初体验——CMD模式有道翻译

来源:互联网 发布:windows bat关闭窗口 编辑:程序博客网 时间:2024/06/10 12:35

磨磨蹭蹭的学习着python,今天终于开始接触Python自带的urllib工具库,感谢小甲鱼的Python教程,跟着一步一步做下来,终于感受到Python在网络方面的简洁性,把代码和效果放上来共享,给与我一样的菜菜鸟们一个参考。

import urllib.requestimport urllib.parseimport json#in_str = ' 'while  True:    print("================================")    print("---------------Python版有道翻译----------------")    print("================================")    in_str = str(input("请输入要翻译的中/英文,离开请输入(por_ext):"))    if in_str == 'por_ext':        print("已退出!")        break    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict2.index'    data = {}    data['type'] = 'AUTO'    data['i'] = in_str    data['doctype'] = 'json'    data['xmlVersion'] = '1.8'    data['keyfrom'] = 'fanyi.web'    data['ue'] = 'UTF-8'    data['action'] = 'FY_BY_CLICKBUTTON'    data['typoResult'] = 'true'    data = urllib.parse.urlencode(data).encode('utf=8')    response = urllib.request.urlopen(url, data)    html = response.read().decode('utf-8')    #print(html)    target = json.loads(html)    tgt_str = target['translateResult'][0][0]['tgt']    src_str = target['translateResult'][0][0]['src']    if 'smartResult' in target:        smart_result = target['smartResult']['entries']    print("您输入的是:%s" % src_str)    print("翻译结果为:%s" % tgt_str)    if 'smartResult' in target:        print("智能详解为:")        for each_value in smart_result:            if each_value != '':                print(each_value)

效果如下:
python有道英文翻译
python有道中文翻译
程序退出

如果仅仅是加了点格式就没意思了,如果心细的人会发现,代码中target所代表的的字典中,根据你输入的翻译内容,字典本身的键值对项目组成也会发生改变。

例子:
输入hello后,target字典组成如下:

{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":0,"translateResult":[[{"src":"hello","tgt":"你好"}]],"smartResult":{"type":1,"entries":["","n. 表示问候, 惊奇或唤起注意时的用语","int. 喂;哈罗","n. (Hello)人名;(法)埃洛"]}}

随便输入个poillaw(乱输入的,没这个单词),没修改前会报错:
这里写图片描述

检查反馈的target你会看到返回的字典内容组成发生变化:

{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":110,"translateResult":[[{"src":"poillaw","tgt":"poillaw"}]],"typoResult":["<b>pillow<\/b>"]}

在“translateResult”键值的下一个“smartResult”键值不见了,变成了“typoResult”。

我并没有去看有道官方的说明文档,那么猜测至少“translateResult”键值对及其之前的内容应该是不变的,那么我如果要在shell里面输出“smartResult”键值对信息前,就需要对其进行检测。

检测分两处,第一处是在smart_Result变量的赋值前用if X in X 语句确定成员是否存在。第二处是在打印语句前增加检测,并在确定可以打印后,去除可能出现的空白内容。

我用的版本是Python 3.6,有兴趣的新手可以试着运行一下看看,欢迎各位的板砖。

0 0
原创粉丝点击