为什么要建立自己的单词库

用过各种的背单词软件,总是在使用其他人的词库或者软件自己提供的词库,基本是人家提供什么自己就用什么,要想有更多的自主基本没有,最近看一个 COCA的按单词使用频率来提取的2万单词表,但没有对应的单词库,知米里倒是可以直接导入英文单词,系统帮你匹配上音标、读音、例句及解释,然而匹配后的结果你却无法导出。

特别是最近准备利用AnkiDroid来进行单词背诵,所以有种要建立自己的单词库的需求。更进一步或许可以自己开发一个背单词的软件也是有可能的。“万里长征第一步,先来建立单词库”,走一步看一步吧。

词库的需求分析

根据需求,词库应该包括如下内容

英文:对应英语单词

音标及读音:分为美语音标,读音,英语音标,读音

词性,中文释义:单词多个含义的不同词性和中文

例句:单词的例句

助记:比如词根或者其他有助于记忆的说明

输出一个文本文件好了,方便以后进行各种处理

使用技术的选择

获得单词的相关信息,目前可以通过百度翻译,有道翻译,必应翻译,谷歌翻译,金山词霸等方式,在综合考虑后选择通过必应字典模式获得相关数据。

数据爬取上,目前最为流行的并且相对成熟的是使用python(也就懂python),所以选择python

对于使用python爬取数据,一般有两种模式,一种是python+urllib+lxml, python+selenium+chrome。本身就是一个小项目,同时自身学习能力有限就没考虑scrapy的爬虫框架了。估计以后要是大量、各种、经常性爬取内容才会考虑这个。什么都要学习呀,学习是要成本的。

python+selenium+chrome

可以模拟浏览器动作,能有效的解决ajax模式下的数据爬取问题

很容易实现基于浏览器的测试

必须能够趟过 selenium 的一系列坑,相对学习成本要高

python+urllib+lxml

学习成本相对较低

ajax,动态网页的爬取不方便

当然两者都需要有一定的正则表达式能力。由于必应字典基本都属于静态网页,所以选择方式2就是python+urllib+lxml模式。

技术实现

1.python及相关环境安装:

使用anaconda 完成整体环境的安装,这里略过,详细见http://www.jianshu.com/p/f452f71860ab

核心代码分析

构造url

基本构造很简单http://cn.bing.com/dict/search?q=单词

获得页面:构造一个函数,输入单词,通过urllib获得对应页面,并返回

def get_page(myword):

basurl='http://cn.bing.com/dict/search?q='

searchurl=basurl+myword

response = urllib.request.urlopen(searchurl)

html = response.read()

return html

解析页面:主要使用lxml,通过xpath进行内容解析,以下以获得单词音标为例,其他相识。

def get_yingbiao(html_selector):

yingbiao=[]

yingbiao_xpath='/html/body/div[1]/div/div/div[1]/div[1]/div[1]/div[2]/div' #xpath

bbb="(https\:.*?mp3)" ##这个是为了获得对应的读音MP3文件,使用正则表达式

reobj1=re.compile(bbb,re.I|re.M|re.S)

get_yingbiao=html_selector.xpath(yingbiao_xpath)

for item in get_yingbiao:

it=item.xpath('div')

if len(it)>0: #处理没有读音或者音标的部分

ddd=reobj1.findall(it[1].xpath('a')[0].get('onmouseover',None))

yingbiao.append("%s||%s"%(it[0].text,ddd[0]))

ddd=reobj1.findall(it[3].xpath('a')[0].get('onmouseover',None))

yingbiao.append("%s||%s"%(it[2].text,ddd[0]))

if len(yingbiao)>0: #数据整形成一个字符串,用四个竖线分隔

return reduce(lambda x, y:"%s||||%s"%(x,y),yingbiao)

else:

return ""

多数据输入输出:输入文件为一个英语单词文件,每个单词一行,输出为一个包含单词,音标,释义,例句的文件,同样每个单词一行。

filename='words.txt' #输入文件

f=open(filename,"r")

words=f.readlines()

f.close()

filename2='words_jieguo.txt' #输出文件

f=open(filename2,"w")

i=0

for word in words:

time.sleep(0.25) #怕爬太快给必应干掉,所以歇一会再来

print(word.rstrip(),i)

word_line=get_word(word.rstrip()) #获得单词相关内容函数

f.write("%s\n"%(word_line.encode('utf-8'))) #写入输出文件

i=i+1

f.close()

整体代码: python3下的实现,在python2下需要进行一些微调。

import urllib.request

from lxml import etree

import re

import time

from functools import reduce

#获得页面数据

def get_page(myword):

basurl='http://cn.bing.com/dict/search?q='

searchurl=basurl+myword

response = urllib.request.urlopen(searchurl)

html = response.read()

return html

#获得单词释义

def get_chitiao(html_selector):

chitiao=[]

hanyi_xpath='/html/body/div[1]/div/div/div[1]/div[1]/ul/li'

get_hanyi=html_selector.xpath(hanyi_xpath)

for item in get_hanyi:

it=item.xpath('span')

chitiao.append('%s||%s'%(it[0].text,it[1].xpath('span')[0].text))

if len(chitiao)>0:

return reduce(lambda x, y:"%s||||%s"%(x,y),chitiao)

else:

return ""

#获得单词音标和读音连接

def get_yingbiao(html_selector):

yingbiao=[]

yingbiao_xpath='/html/body/div[1]/div/div/div[1]/div[1]/div[1]/div[2]/div'

bbb="(https\:.*?mp3)"

reobj1=re.compile(bbb,re.I|re.M|re.S)

get_yingbiao=html_selector.xpath(yingbiao_xpath)

for item in get_yingbiao:

it=item.xpath('div')

if len(it)>0:

ddd=reobj1.findall(it[1].xpath('a')[0].get('onmouseover',None))

yingbiao.append("%s||%s"%(it[0].text,ddd[0]))

ddd=reobj1.findall(it[3].xpath('a')[0].get('onmouseover',None))

yingbiao.append("%s||%s"%(it[2].text,ddd[0]))

if len(yingbiao)>0:

return reduce(lambda x, y:"%s||||%s"%(x,y),yingbiao)

else:

return ""

#获得例句

def get_liju(html_selector):

liju=[]

get_liju_e=html_selector.xpath('//*[@class="val_ex"]')

get_liju_cn=html_selector.xpath('//*[@class="bil_ex"]')

get_len=len(get_liju_e)

for i in range(get_len):

liju.append("%s||%s"%(get_liju_e[i].text,get_liju_cn[i].text))

if len(liju)>0:

return reduce(lambda x, y:"%s||||%s"%(x,y),liju)

else:

return ""

def get_word(word):

#获得页面

pagehtml=get_page(word)

selector = etree.HTML(pagehtml.decode('utf-8'))

#单词释义

chitiao=get_chitiao(selector)

#单词音标及读音

yingbiao=get_yingbiao(selector)

#例句

liju=get_liju(selector)

return "%s\t%s\t%s\t%s"%(word,yingbiao,chitiao,liju)

filename='5.txt'

f=open(filename,"r")

words=f.readlines()

f.close()

filename2='5_jieguo.txt'

f=open(filename2,"wb")

i=0

for word in words:

time.sleep(0.2)

print(word.rstrip(),i)

word_line=get_word(word.rstrip())

f.write("%s\n"%(word_line))

i=i+1

f.close()

由于单词本身不多,而时间其实更多,所以没进行多线程的改造,按一小时3600秒,一秒爬4-5个单词,一小时也能爬下不少单词,多线程改造意义不大。

最后爬1w单词和对应mp3文件一并发了吧

语音(访问码:1386)

单词(访问码:7678)

python英语词汇读音_利用PYTHON 爬虫爬出自己的英语单词库相关推荐

  1. python英语词汇读音_利用Python制作查单词小程序(一):抓取来自百度翻译的单词释义和音标...

    小编在学习英语的时候,遇到不认识的英语单词,会用百度翻译来查询单词的释义和音标,并播放单词的读音.为了便于复习和记忆,需要将单词的释义和音标以复制粘贴的方式保存到本地. 这个过程非常繁琐,于是小编就想 ...

  2. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)

    抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...

  3. python展示全部好友_利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  4. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(二)

    今天继续新的专题.主要讲解[利用PYTHON制作桌面版爬虫软件]下的如何实现界面功能(一).该讲主要包括以下三个内容:掌握如何编写主函数,运行界面. 了解pywin32模块. 如何用python识别Q ...

  5. python post请求 上传图片_利用python模拟实现POST请求提交图片的方法

    本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传 ...

  6. python实现邮件客户端_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  7. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  8. python黑科技脚本_利用Python实现FGO自动战斗脚本,再也不用爆肝啦~

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 利用Python实现FGO自动战斗脚本,再也不用爆 ...

  9. python金融量化风险_利用 Python 进行量化投资分析 - 利率及风险资产的超额收益...

    本文是 利用 Python 进行量化投资分析 系列的第一篇文章,这个系列主要以 Python 作为工具,结果国内金融市场情况,及使用真实历史数据来实践一些基础的金融投资概念. 这篇文章主要讲述了真实利 ...

最新文章

  1. oracle的用户账号密码设置
  2. 一周一论文(翻译 总结)—— [DSN 18] RDMC A Reliable RDMA Multicast for Large Objects :一个面向大型对象的可靠的RDMA广播框架
  3. 计算机安全性无效无法连接到网络,图文研习windows10系统连接网络提示无法连接到此网络错误的方法?...
  4. python 导入包 作用域_Python 包、模块、函数、变量作用域
  5. C++语言基础 —— 循环结构
  6. 论文阅读:Siam-RPN
  7. 2013计算机核心期刊,2013年度发表国内核心期刊论文
  8. Python百度文库爬虫终极版
  9. 刽子手游戏 做题笔记
  10. cfg文件怎么改回计算机程序,我把一个拓展名为cfg文件用word打开后,凡是cfg的文件图标都变成了word,肿么改回去?...
  11. python读取文件夹中的所有图片并将图片名逐行写入txt中
  12. java雷霆战机项目收获_java实习项目_雷霆战机
  13. 【2019-2020春学期】数据库作业13:SQL练习8 - CHECK / CONSTRAINT / TRIGGER / PROCEDURE/ FUNCTION
  14. 备份华为物理服务器目录到U盘
  15. 前端如何设置浏览器网页标签页前的小图标favicon.ico
  16. Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案
  17. 建设网站:购买域名和主机的原则你知道吗?
  18. Apple M1 上安装tensorflow开发环境
  19. java 抽取 word,pdf 的四种武器
  20. 使用云服务安装Hyperledger Fabric 全过程

热门文章

  1. 强制域名使用 HTTPS(SSL)
  2. Plantuml类图用法
  3. 分库分表和 NewSQL 到底怎么选?
  4. 虚函数多态性实现求几何图形面积
  5. 函数的定义以及关键字参数
  6. [转]全球付虚拟卡申请流程~
  7. python ----Parser使用
  8. web前端三大主流框架是什么?
  9. linux用mkefs不能进行格式化,磁盘格式化命令 mkfs
  10. ppt如何替换其他mo ban_吴军老师《P荆斩棘, P沙捡金,T纲挈领 :职场PPT制作与呈现技巧》课程大纲...