欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在线词典(*面)

程序员文章站 2022-05-04 14:08:22
...

实现思路:

  1. 词典的释义是从爱词霸服务器上获取的,所以先要获取一个身份key,获取方法:①.打开爱词霸网站:爱词霸;②.选择爱词霸查词,提交信息之后在邮箱获得一个包含身份的key
  2. 利用openural对爱词霸网站所有信息进行抓取并转化为字符串
  3. 利用d = json.loads(s)将获取的信息转换为dict
  4. 这里打印d,提取d中需要的字符串,就会发现这样一个情况:(这里是为了方便解读调整过格式,d的原格式其实是没有空格和换行的)
    '''
    {'word_name': 'hello',
    'is_CRI': 1,
    'exchange': {'word_pl': ['hellos'], 
    'word_past': '',
    'word_done': '', 
    'word_ing': '',
    'word_third': '', 
    'word_er': '', 
    'word_est': ''}, 
    'symbols': [{'ph_en': "hə'ləʊ", 'ph_am': 'həˈloʊ', 'ph_other': '', 'ph_en_mp3': '',                     
        'ph_am_mp3': 
        'http://res.iciba.com/resource/amp3/1/0/5d/41/5d41402abc4b2a76b9719d911017c592.mp3', 
        'ph_tts_mp3': 'http://res-tts.iciba.com/5/d/4/5d41402abc4b2a76b9719d911017c592.mp3', 
        'parts': 
            [{'part': 'int.', 'means': ['哈喽,喂', '你好,您好', '表示问候', '打招呼']}, 
            {'part': 'n.', 'means': ['“喂”的招呼声或问候声']}, {'part': 'vi.', 'means': 
                ['喊“喂”']}]}], 
           'items': ['']}
    
    '''

    这是一个很长的字符串,这里我们只需要提取单词的意思:注意这个过程其实很有意思,涉及到了数据类型的迭代,下面是提取的思路:①.根据符号可知,整个数据的类型为字典,则先调用d['symbols']进入字典之内,②.观察数据发现d['symbols']的value是长度为1的数组,则我们调用d['symbols'][0]进入数组,③.最后,d['symbols'][0]数组其实是由字典构成,我们调用d['symbols'][0]['parts']就实现了提取单词的所有意思,④.由于d['symbols'][0]['parts']的value也是字典,此时输出单词的意思只需要遍历该字典就可以了。(这里在自己第一次做的时候卡了一个小时左右,其实这就是python中数据的迭代,只需要注意符号一层层遍历就好啊了)

  5. 对处理后的字符串进行遍历操作即可

实现源码:

import json
import urllib.request

log = print


def openurl(url):
    # 这里把 url 写死为豆瓣 top250 页面
    # url = 'https://movie.douban.com/top250'
    # 下载页面, 得到的是一个 bytes 类型的变量 s
    s = urllib.request.urlopen(url).read()
    # 用 utf-8 编码把 s 转为字符串并返回
    content = s.decode('utf-8')
    return content


def translate(word):
    """
    word 是一个不包含空格的单词
    """
    key = 'A052B9965AA8C418D9866AC5F8F24F8D'
    url = 'http://dict-co.iciba.com/api/dictionary.php?type=json&key={}&w={}'.format(key, word)

    # openurl 是课 4 作业 14 的 openurl 函数
    # 用来获取网络词典返回的结果
    s = openurl(url)
    d = json.loads(s)
    result = ''
    list1 = d['symbols'][0]['parts']
    for i in range(len(list1)):
        result = result + list1[i]['part'] + '\n'
        list2 = list1[i]['means']
        for m in range(len(list2)):
            result = result + list2[m] + '\n'
        result = result + '\n'
    return result


def main():
    word = 'hello'
    s = translate(word)
    log(s)


if __name__ == '__main__':
    main()

 

相关标签: 词典