在线词典(*面)
程序员文章站
2022-05-04 14:08:22
...
实现思路:
- 词典的释义是从爱词霸服务器上获取的,所以先要获取一个身份key,获取方法:①.打开爱词霸网站:爱词霸;②.选择爱词霸查词,提交信息之后在邮箱获得一个包含身份的key
- 利用openural对爱词霸网站所有信息进行抓取并转化为字符串
- 利用d = json.loads(s)将获取的信息转换为dict
- 这里打印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中数据的迭代,只需要注意符号一层层遍历就好啊了)
-
对处理后的字符串进行遍历操作即可
实现源码:
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()
下一篇: Python--音频文件分类代码