关闭

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

标签: pythonurllib
122人阅读 评论(0) 收藏 举报
分类:

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

import urllib.request
import urllib.parse
import 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:459次
    • 积分:34
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档