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

用过各种的背单词软件,总是在使用其他人的词库或者软件自己提供的词库,基本是人家提供什么自己就用什么,要想有更多的自主基本没有,最近看一个 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模式。

实现

python及相关环境安装:使用anaconda 完成整体环境的安装,这里略过,详细见http://jianshu/p/f452f71860ab

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

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

#注:为排版准确,一下前端缩进为全角空格,复制粘贴是运行不起来的

def get_page(myword):

basurl='http://cn.bing/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/p[1]/p/p/p[1]/p[1]/p[1]/p[2]/p' #xpath

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

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

get_yingbiao=html_selector.xpath(yingbiao_xpath)

for item in get_yingbiao:

it=item.xpath('p')

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

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

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

python根据单词爬取相关例句,y开头的英语单词相关推荐

  1. 【python爬虫】爬取Bing词典的单词存到SQLite数据库(加了pyqt5界面显示)

    之前一篇博客的连接: [python爬虫]爬取Bing词典的单词存到SQLite数据库 相比之前这篇文章中的源码,这次带UI的代码不仅改进了UI界面,爬虫部分的代码也有改进. 展示 代码github ...

  2. python扇贝单词书,学习猿地-python 爬虫,爬取扇贝单词网单词

    对于python爬虫并不是很熟悉,遇到下面的问题,希望知道的朋友可以给个解决问题的方向! 需要爬出扇贝单词网里面单词书的单词,现在对于没有目录的单词书可以爬出来,如果有一层目录就没办法了 需要手动到这 ...

  3. Python网络数据爬取及分析-智联招聘

    python网络数据爬取及分析-智联招聘 一. 数据爬取 智联招聘是一家面向大型公司和快速发展的中小企业提供一站式专业人力资源的公司,可在智联招聘网站上根据不同城市.不同职位需求搜索得到相关招聘信息. ...

  4. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  5. python写图片爬取软件_python制作微博图片爬取工具

    有小半个月没有发博客了,因为一直在研究python的GUI,买了一本书学习了一些基础,用我所学做了我的第一款GUI--微博图片爬取工具.本软件源代码已经放在了博客中,另外软件已经打包好上传到网盘中以供 ...

  6. python爬虫:爬取猎聘网站职位详情

    python爬虫:爬取猎聘网站职位详情 第一次学习python,也是刚开始学习爬虫,完成的第一个实例,记录一下. baseurl.py # @author centao # @time 2020.10 ...

  7. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

  8. [python] 常用正则表达式爬取网页信息及分析HTML标签总结

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  9. [python学习] 简单爬取维基百科程序语言消息盒

    文章主要讲述如何通过Python爬取维基百科的消息盒(Infobox),主要是通过正则表达式和urllib实现:后面的文章可能会讲述通过BeautifulSoup实现爬取网页知识.由于这方面的文章还是 ...

最新文章

  1. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
  2. Spring Boot启动过程源码分析--转
  3. c++ 获取文件的hashcode_jsp 实现文件上传和下载
  4. 多功能时钟电路的设计框图_一种病理组织漂片多功能一体机的设计
  5. 算力云服务器是干啥的,云服务器将成趋势计算力和安全性是考验
  6. [SCOI2009]最长距离
  7. 钉钉开放平台:内网穿透工具 - 服务器免费打造教程
  8. python 字符串替换多个_python同时替换多个字符串方法示例
  9. 让我当你的圣诞老人吧,派发3本技术好书
  10. 【7.24校内交流赛】T3【qbxt】复读警告
  11. 计算机应用中级职称报告,中级工程师职称总结
  12. Linux创建.txt文件
  13. instsrv.exe和srvany.exe将.exe文件注册为windows服务
  14. Windows的13个版本的区别,企业版、教育版、专业版、工作站版、SE版的主要区别
  15. java eml_java读取eml文件 | 学步园
  16. 怎么用dw修改PHP网页模板,【网站模板如何使用】从网站下载的网页模板在dwcs6中如何修改使用?什么是网页设计模板,如何利用网页设计模板?...
  17. 什么是DAS、NAS、SAN、IP-SAN,它们之间有什么区别?
  18. 35、python并发编程之多线程(理论篇)
  19. Linux常用命令(入口)
  20. Unity的动画图和人形动画初探

热门文章

  1. springboot高级篇及springboot1.5转springboot2.17所遇到的坑
  2. 锅炉废气监测 环保数采仪自动监测 告警预警 工况监测
  3. python一键去除图片水印,含简单可视化界面
  4. Golang 浮点数格式化输出,保留一位小数
  5. 中国无人机传感器行业市场供需与战略研究报告
  6. 斗破苍穹文字页游php_浅谈斗破影视化下的网络文学二次创作
  7. Pose-Guided Feature Alignment for Occluded Person Re-Identification阅读笔记
  8. 对一个排序去重。要求:有重复的关键字,保留后一个,删除前面的
  9. WPF九宫格图片自定义皮肤(新博速读2.0)
  10. 看完跳槽少说涨 5 K,前端面试从准备到谈薪完全指南(近万字精华)