0.说明

通过浏览器跟踪【有道词典】和【有道翻译】网页查询过程,制作python简易字典。

代码案例在:https://github.com/suchocolate/test/tree/master/spider/simpledictionary

制作过程:

  1. 踩点查词
  2. 踩点翻译
  3. 制作程序

1.踩点有道词典

1.1 先踩点查英文单词

F12浏览器登陆有道词典网页,查看实际查英文词的URL是:http://dict.youdao.com/w/eng/dog/

记录一下查询结果的xpath,交给lxml.etree解析:

 1.2 再查一下中文词

发现URL是:http://dict.youdao.com/w/%E7%8B%97/,这个“%E7%8B%97”是URL编码的中文,可以用urllib.parse里的quote制作。

2.踩点有道翻译

有道翻译的URL是:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule。

后来发现向这个URL POST数据不会得到结果,真正的URL要把“_o”去掉。

翻译时,浏览器发送的是表单,那么到时封装到request的data里。

有道返回的是json,用json解析:

3.制作程序

# 请求网页用
from urllib import request, parse
# 制作转化中文为URL格式
from urllib.parse import quote
# 分析库
from lxml import etree
# 用tkinter做图形化
from tkinter import *
# 解析json数据
import json# 英文单词查询网址
ebase = 'http://dict.youdao.com/w/eng/'
# 中文单词查询网址
cbase = 'http://dict.youdao.com/w/'
# 翻译网址
trans = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
# 查询时http头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"}
# 翻译提交的字典
dic = {"doctype": "json"}# 判断查询类型,1是查词,2是翻译。
def chaxun():if v.get() == 1:chaci()else:fanyi()# 定义查词函数:
def chaci():wd = e1.get()# 如果是中文查询,转换中文为URL编码格式,中文unicode编码范围。if '\u4e00' <= wd <= '\u9fff':# 转中文为URL编码wd = quote(wd)url = cbase + wdq = request.Request(url=url, headers=headers)r = request.urlopen(q, timeout=2)html = etree.HTML(r.read().decode('utf-8'))# 查中文时的xpath和英文的xpath不同result = html.xpath('/html/body/div[1]/div[2]/div[1]/div[2]/div[2]/div[1]/div/ul/p/span/a/text()')else:url = ebase + wdq = request.Request(url=url, headers=headers)r = request.urlopen(q, timeout=2)html = etree.HTML(r.read().decode('utf-8'))# 查英文词的xpathresult = html.xpath('/html/body/div[1]/div[2]/div[1]/div[2]/div[2]/div[1]/div/ul/li/text()')# 清理text,重新显示text1.delete(1.0, END)# 如果有结果,显示结果if len(result) != 0:for pt in result:text1.insert(INSERT, pt + '\n')else:# 如果没有结果,提示没有结果text1.insert(INSERT, 'There is no explain.')# 翻译
def fanyi():# 清除文本框中的内容text1.delete(1.0, END)# 获取输入框的字,复制给变量wd,装入字典wd = e1.get()dic['i'] = wddata = bytes(parse.urlencode(dic), encoding='utf-8')# 开始翻译q = request.Request(url=trans, data=data, headers=headers, method='POST')r = request.urlopen(q)# 得到的结果是json数据,result = json.loads(r.read().decode('utf-8'))# 数据处理后放入输入框text1.insert(INSERT, result['translateResult'][0][0]['tgt'])if __name__ == '__main__':# 主函数,定义一个tk对象root = Tk()root.title('简易有道词典')# 定义一个说明标签l1 = Label(root, text='请输入要查询的内容:')l1.grid(row=0, column=0)# 定义一个输入框e1 = Entry(root)e1.grid(row=0, column=1, padx=1, pady=5)# 定义一个按钮bt1 = Button(root, text='查询', command=chaxun)bt1.grid(row=0, column=2, padx=5, pady=5)# 定义一个文本框text1 = Text(root, width=59, height=10)text1.grid(row=1, columnspan=5, padx=5, pady=7)# 定义一个单选变量,初始值1,即默认是查词v = IntVar()v.set(1)# 定义一个单选框Radiobutton(root, text="查词", variable=v, value=1).grid(row=0, column=3)Radiobutton(root, text="翻译", variable=v, value=2).grid(row=0, column=4)# 循环窗体mainloop()

运行的效果

python简易有道词典相关推荐

  1. python有道翻译-Python调用有道词典翻译

    Python调用有道词典翻译 分析 翻译按钮 点击翻译按钮,查看网络请求,如图 共有四个网络请求,通过分析,查看返回的信息,显然第一个是真正的翻译请求,具体信息如下: 如图所示,我们真正关注的是请求参 ...

  2. python有道-Python调用有道词典翻译

    Python调用有道词典翻译 分析 翻译按钮 点击翻译按钮,查看网络请求,如图 共有四个网络请求,通过分析,查看返回的信息,显然第一个是真正的翻译请求,具体信息如下: 如图所示,我们真正关注的是请求参 ...

  3. python调用有道词典_菜鸟上手Python最有野心的库Asyncio

    Asyncio是Python中非常牛逼的一个异步并发库,比较复杂不太好理解!从Py3.4之后开始加入这个内置并发库,一举解决了Python中高并发的问题.它提供了一整套异步IO模型的编程接口,可以说它 ...

  4. python读音有道词典-有道词典命令行快速翻译,Python编程的利器

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python实用宝典,作者Python实用宝典 在编程时经常会遇到 ...

  5. python读音有道词典-利用python实现命令行有道词典的方法示例

    前言 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性自己实现 ...

  6. python利用有道词典翻译_使用Python从有道词典网页获取单词翻译

    从有道词典网页获取某单词的中文解释. import re import urllib word=raw_input('input a word\n') url='http://dict.youdao. ...

  7. python爬虫有道词典_Python爬取有道词典,有道的反爬很难吗?也就这样啊!

    前言 大家好 ​ 最近python爬虫有点火啊,啥python爬取马保国视频--我也来凑个热闹,今天我们来试着做个翻译软件--不是不是,说错了,今天我们来试着提交翻译内容并爬取翻译结果 主要内容 PS ...

  8. python有道字典_Linux下自制有道词典 - python 解密有道词典JS加密

    对于爬虫新手来说,JS解密是一道过不去的坎,需要不断地练习. 平时在linux下开发,鉴于没有什么好用翻译软件,打开网易也占用系统资源,所以写了个在控制台的翻译软件接口. 使用python爬虫,查看网 ...

  9. python利用有道词典翻译_Python利用有道词典接口制作即时翻译的工具

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Python 实用宝典,作者Python 实用宝典 前言 在编程时经 ...

最新文章

  1. 单元测试 Mocking 类库需具备的特性
  2. 用 Spark 为 Elasticsearch 导入搜索数据
  3. 细说PHP中strlen和mb_strlen的区别
  4. Android视图组成View
  5. python全局变量global线程安全_对python多线程与global变量详解
  6. python 内建函数basestring笔记
  7. android 清除应用程序数据,清除Android应用程序用户数据
  8. 【转】网络安全-------防止被抓包
  9. Pytorch使用记录
  10. 02: python3使用email和smtplib库发送邮件
  11. 大规模业务技术架构设计与战术(架构师必看)
  12. 实验报告四201521460014
  13. 通达OA 商务平台OA2017新版本简易评测(图文)
  14. android 滤镜lomo,iOS滤镜实现之LOMO(美图秀秀经典LOMO)(示例代码)
  15. AI视频生成工具 抖音短视频剪辑软件
  16. Win7安装CAD出现错误1606 最简单的解决方法
  17. 安装系统时,硬盘格式转换
  18. 第一次实验报告学习总结
  19. 20189220 余超《Linux内核原理与分析》第二周作业
  20. ESP32 Ubuntu开发环境搭建

热门文章

  1. MySQL、Redis、MongoDB安装
  2. File.separator用法
  3. Android获取系统的硬件信息、系统版本以及如何检测ROM类型
  4. deflate树与deflate编码
  5. 通道注意力机制keras_在TensorFlow+Keras环境下使用RoI池化一步步实现注意力机制
  6. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)
  7. 33个高能CSS选择器让我受益匪浅
  8. 汉字五行 五格五行 喜用神
  9. 进程和线程的主要区别及进程与程序的主要区别
  10. Android---TabLayout