python简易英文字典_Python爬虫:自制简易词典
运行平台: Windows
Python版本: Python3.6
IDE: PyCharm
其他工具:Chrome浏览器作为一个程序员,会经常查阅一些技术文档和技术网站,很多都是英文的,遇到不认识的词就要查,词典的使用频率也颇高,既然是程序员,高逼格的方式当然是做一个词典,此为动机。
1.寻找词典来源
我寻找一个好的词典的标准是:解释到位、数据抓取方便。
几个候选词典有:百度翻译、金山词霸、有道翻译、谷歌翻译。
最终选定金山词霸作为词源,原因:大学时就使用金山词霸;
url比较简单。
2.数据抓取
2.1 寻找URL
打开金山词霸在线翻译首页http://www.iciba.com/,输入一个单词进行查询,此处以“call”为例,查询页面出来以后看URL,浏览器的地址栏内容为http://www.iciba.com/call 。猜想查询URL格式为http://www.iciba.com/后面跟上要查询的单词(或词语),将call改为其他单词果然跳出相应的查询页面,中文也一样,由此可以证明以上猜想,也可以看出查询的URL真的简单明了。
2.2 寻找数据
我只是想弄懂单词的意思,所以我需要的数据是如图所示部分:
在浏览器按F12键调出开发者工具,然后刷新页面,我们要在页面中寻找我们需要的数据,按图示操作:
确定好了数据区域是< ul class="base-list switch_part">和< /ul>中间的部分,接下来就把这些数据都抓取下来吧。
2.3 抓取数据
抓取数据用到了urllib.request库,解析html用到了BeautifulSoup库。所以首先导入这两个库。
import urllib.request
from bs4 import BeautifulSoup
需要将整个网页内容抓取下来,用如下代码实现:
root_url = 'http://www.iciba.com/'
word = input('请输入想要查询的单词(或"q"退出):\n')
url = root_url + word # 拼接URL
response = urllib.request.urlopen(url)
html = response.read()
有了html内容,接下来要把 base-list switch_part 标签里的内容读取出来,BeautifulSoup里的find可以实现此功能:
soup = BeautifulSoup(html, 'lxml')
tag_soup = soup.find(class_='base-list switch_part')
print(tag_soup)
获得输出结果为:
v.
呼唤,喊叫;
召唤,叫来,召集;
下令,命令;
打电话给
,
n.
喊叫,大声喊;
电话联络;
必要,理由;
要求
可以看出里面包含了两个< li class="clearfix">< /li>,这表明call这个单词有两个词性,接下来就要解析出所有的词性,用到BeautifulSoup的find_all函数:
meanings = tag_soup.find_all(class_='clearfix')
for i in range(len(meanings)):
translation = meanings[i].get_text() # 获取文本内容
print(translation.strip()) # 去掉字符串开头和结尾的空行
print('='*30) # 华丽的分割线
最后输出结果如图所示,这已经是我想要的结果了。
3. 改进优化
该词典的的基本功能已经完成,但是存在几个缺陷。
3.1 查询中文
查询英语单词已经没有问题了,那么查询中文试试:
程序报错,是编码问题,是urllib.request.urlopen函数导致的,我们只需将URL拼接改为url = root_url + urllib.parse.quote(word)即可,试一下:
3.2 查询不存在的单词
如果查询不存在的单词结果会如何:
失败是因为在tag_soup = soup.find(class_='base-list switch_part')这一行执行完之后,tag_soup的值为None,已经不是BeautifulSoup里的数据类型了,已经不能使用find_all 函数了。那么在此处做一个判断:如果tag_soup为None,打印提醒语句并等待下一次输入
如果tag_soup不为None,那么继续执行下面的解析。
if tag_soup == None: # 防止输入的单词没有释义
print(Fore.GREEN + '输入的单词不存在,重新输入.')
else:
meanings = tag_soup.find_all(class_='clearfix')
for i in range(len(meanings)):
translation = meanings[i].get_text()
print(ranslation.strip()) # 去掉字符串开头和结尾的空行
print('='*30)
3.3 停止
为了可以循环查询,将用户输入、查询、显示的步骤放到while True:语句里,那么如何优雅的退出呢?判断输入,我以字母‘q’为退出标识。
while True:
word = input('请输入想要查询的单词(或"q"退出):\n')
if word == 'q':
break
else:
......(解析和显示工作)
3.4 给你点颜色看看
这个工具是要自己使用的,最终是在控制台下显示,一团黑白相间的东西,没有美感,那么如何美化输出呢?将输出染上颜色。
控制台输出上色需要用到colorama第三方库,使用pip进行安装:
pip install colorama
引入该库:
from colorama import init,Fore # init是初始化,Fore是字体颜色
init(autoreset=True) # 初始化
将几个print语句进行上色:
print(Fore.GREEN + '输入的单词不存在,重新输入.')
......
print(Fore.CYAN + translation.strip())
print(Fore.RED + '='*30)
来看一下最终效果:
至此,一个简单的词典就完成了。
4. 如何使用
4.1 直接运行py文件
如果你已经开发完此词典说明你电脑里已经有python环境了,那么可以直接运行py文件。我已经将py文件的打开应用设置为python.exe了,所以可以直接双击运行。
打开cmd,进入该py文件目录,执行python dict.py即可运行。
4.2 打包
如果要给别人使用,那么打包成exe就是个完美的解决方案了。打包用到了pyinstaller第三方库,执行pip install pyinstaller进行安装。此处打包用到了pyinstaller的两个参数:
参数含义-F指定打包后只生成一个exe格式的文件-i改变生成程序的icon图标
到网上去下载一个ico文件作为改程序的图标(程序员也是要美感的),推荐一个icon下载网站http://www.easyicon.net/ 。打开CMD,进入到dict.py所在文件夹执行如下指令:
pyinstaller -F -i Dictionary.ico dict.py
在dist目录下就可以看到生成的exe了。把dict.exe放到某个目录下,将快捷方式放到桌面,或者将该目录放到系统环境变量中,在cmd下直接敲dict.exe就能运行了,酷!
欣赏一下最终效果:
5.完整代码
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 16 2017
@author: WangQiang
"""
import urllib.request
from bs4 import BeautifulSoup
from colorama import init,Fore
init(autoreset=True)
root_url = 'http://www.iciba.com/'
while True:
word = input('请输入想要查询的单词(或"q"退出):\n')
if word == 'q':
break
else:
url = root_url + urllib.parse.quote(word) # 解决url中带有中文编译失败的问题
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'lxml')
tag_soup = soup.find(class_='base-list switch_part')
if tag_soup == None: # 防止输入的单词没有释义
print(Fore.GREEN + '输入的单词不存在,重新输入.')
else:
meanings = tag_soup.find_all(class_='clearfix')
for i in range(len(meanings)):
translation = meanings[i].get_text()
print(Fore.CYAN + translation.strip()) # 去掉字符串开头和结尾的空行
print(Fore.RED + '='*30)
python简易英文字典_Python爬虫:自制简易词典相关推荐
- python编写英文字典_python如何制作英文字典
python如何制作英文字典 发布时间:2020-09-18 09:23:03 来源:脚本之家 阅读:106 作者:黑脉金 本文实例为大家分享了python制作英文字典的具体代码,供大家参考,具体内容 ...
- python简易英文字典_Python简单有道字典,python,简易,词典
0.说明 通过浏览器跟踪[有道词典]和[有道翻译]网页查询过程,制作python简易字典. 制作过程: 踩点查词 踩点翻译 制作程序 1.踩点有道词典 1.1 先踩点查英文单词 F12浏览器登陆有道词 ...
- python制作英语字典_Python爬虫之自制英汉字典
最近在微信公众号中看到有人用Python做了一个爬虫,可以将输入的英语单词翻译成中文,或者把中文词语翻译成英语单词.笔者看到了,觉得还蛮有意思的,因此,决定自己也写一个玩玩~~ 首先我们的爬虫要能将英 ...
- 用python制作英文字典_python制作英文学习字典案列
def rdic(): fr = open('dic.txt','r') for line in fr: line = line.replace("\n",'') v = line ...
- python制作英语字典_python如何制作英文字典
本文实例为大家分享了python制作英文字典的具体代码,供大家参考,具体内容如下 功能有添加单词,多次添加单词的意思,查询,退出,建立单词文件. keys=[] dic={} def rdic(): ...
- python 简单英文字典
Python 简单英文字典 python 简单英文字典 功能:包括英文的查询,和模糊查询,添加,删除,退出,修改(包括对单词的修改和解释的修改在这里插入代码片) 代码菜鸟,在有的地方还是有问题的就是数 ...
- python列表生成字典_Python 列表生成式 字典生成式
Python 列表生成式 & 字典生成式 通过生成式可以更加简洁地生成列表和字典 列表生成式 对比 直接生成数据后加入列表示例: user_list = list() for i in ran ...
- python json转换字典_Python json转字典字符方法实例解析
josn基本操作 1.导入import json 2.字典转json:json.dumps(dict,ensure_ascii=False),加,ensure_ascii=False转换之后无中文乱码 ...
- python csv写入字典_python csv与字典操作
# encoding: utf-8 import csv d1 = {'banana':3,'apple':4,'pear':1,'orange':2} d2 = {'banana':3,'orang ...
最新文章
- java基础笔试_java基础笔试题
- 南京廖华计算机二级考试答案,计算机二级Excel表格题库答案(解题步骤)
- JS正则判断输入框是否仅仅含有汉字、字母和数字
- Java并发(十九):final实现原理
- jq之$(“p:first“)
- win7 ie临时文件夹怎么修改存放位置
- Spring Boot文档阅读笔记-how-to-implement-2-way-ssl-using-spring-boot
- jquery-等待加载-显示隐藏-遍历
- Python实现TCP协议套接字多路复用
- C#中级-Windows Service程序安装注意事项
- 什么是软件测试的缺陷指标,软件测试缺陷度量分析
- csdn如何上传附件
- opencv (五十四)ORB特征点
- lzg_ad:XPE系统管理工具组件
- python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论
- 将原神角色导入unity 完整版
- c语言fscanf 发生段错误,亚嵌教育
- 其实macbook装win7很简单
- java中for(int a:list)
- 一个优秀妹子的后台面试经验,含泪总结...