py爬取英文文档学习单词

  最近开始看一些整本整本的英文典籍,虽然能看个大概,但是作为四级都没过的我来说还是有些吃力,总还有一部分很关键的单词影响我对句子的理解,因为看的是纸质的,所以查询也很不方便,于是想来个突击,我想把程序单词收拢在一起学习一下,希望这样的更有针对性一些,因为你想,arbitrary (任意的,武断的)这样的单词不太可能会出现在技术文档上,学了这样的单词对理解英文技术文档没有太大帮助。所以今天花了几个小时研究了一下,发现是很可行的,实现也不算难。步骤主要是以下几点,第一:先搞定翻译接口。翻译的来源分为接口型和爬虫型,我看了看百度的那个翻译页面,不是很好爬,但是百度官方提供了翻译的接口,只要申请成为百度的开发者即可,然后利用百度给的app key即可实现翻译,而且接口也很丰富,但是我还是觉得略微麻烦。另外一个就是谷歌了,我仔细看了看谷歌翻译页面的接口,发现竟然出奇的简单,只有一个set-cookie的接口,然后就是翻译的接口,你肯定猜到了,我用的就是爬取谷歌的翻译页面。第二:爬取你想分析的英文文档的单词。翻译嘛,总的有大批的单词啊,那么我这边也是通过爬虫获取的,给定一个页面,比如https://docs.python.org/3/library/abc.html#module-abc这样的技术文档,我们需要把所有看上去像单词的单词都正则匹配出来,然后逐个调用翻译接口翻译出来。好了,思路的介绍就是这样了,如果你已经产生了兴趣,你可以不往下看,自己先摆弄一番,如果你觉得想先看看我的实现,那我也十分欢迎。OK,我们先上一张结果图,。这个就是所谓的爬取和翻译的结果了。那么我们紧接着贴一下代码吧:

# -*- coding: utf-8 -*-
import re, urllib.parse, urllib.request, http.cookiejar# 以下四行代码是为了缓存cookie用的,谷歌翻译接口给不给你翻译,他只看请求源有没有他认可的cookie,一般的urllib.request请求是不会缓存cookie的
cj = http.cookiejar.LWPCookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)

# 通过get请求来获取数据,这里需要注意的是,headers是应该带上的,虽然是get请求,但是某些网站的后台是会检测请求有没有带headers的,不带headers被认为是爬虫,他不理睬的,所以我们也要模拟一下
def getData(url):
    headers = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0‘}
    request = urllib.request.Request(url = url, headers = headers)
    response = urllib.request.urlopen(request)
    text = response.read().decode(‘utf-8‘)
    return text

# 谷歌翻译页面只需要登陆一次
google_logined = False

# 翻译函数
def translate(word):
    if not google_logined:     # 刚才说的那个set-cookie的接口就是下面这个简短的http://tr...../,他会设置一段cookie
        getData(‘http://translate.google.cn/‘)
        global google_logined
        google_logined = True
    try:     # 常常的url就是翻译接口,最后带上需要翻译的单词
        data = getData("http://translate.google.cn/translate_a/single?client=t&sl=en&tl=zh-CN&hl=zh-CN&dt=bd&dt=ex&dt=ld&dt=md&dt=qc&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&oc=2&otf=1&srcrom=1&ssel=0&tsel=0&q=" + word)     # 其实翻译出来的东西蛮多的,可是我们只需要最前面的中文就好了,于是正则匹配一下拿出来即可
        reg = re.compile(‘^\[\[\[\"(.+?)\",\"(.+?)\"\]‘)
        tran = reg.findall(data)[0]   # 一开始我没有用try except,发现有些单词的翻译json结构变了,估计是不好翻译以后,谷歌给的json很短,正则匹配出错了,所以try一下吧
    except:
        return (‘error========================>>>‘+word)
    return tran

# 这个正则用途你也许猜到了,就是正则匹配一个页面的所有的单词,但是性能并不是很好,他会把<span>apple</span>中的span和apple都匹配出来,不过稍加处理也就可以解决,咱先让性能一边玩去
parse_word_reg = re.compile(‘([a-zA-Z]{3,})‘)

# 解析页面单词的函数,参数为url,用上面的正则去匹配,返回来的是一个结果列表,另外我用set这个集合生成函数做了一下过滤,用过python的童鞋懂的。。。
def parse_words(url):
    content = getData(url)
    words = parse_word_reg.findall(content)
    words = list(set(words))
    return words

# 好了,万函具备,只欠测试了,我们传一个技术文档的url进去实施吧,发现他就逐个逐个开始翻译了。
words = parse_words("https://docs.python.org/3/library/abc.html#module-abc")
for word in words:
    print(translate(word))

py爬取英文文档学习单词

时间: 2024-10-14 00:44:20

py爬取英文文档学习单词的相关文章

docker swarm英文文档学习-9-使用Docker Configs存储配置数据

Store configuration data using Docker Configs 使用Docker Configs存储配置数据 Docker 17.06引入了集群服务配置,允许你在服务镜像或运行的容器之外存储非敏感信息,如配置文件.这允许你尽可能保持镜像的通用性,而不需要将配置文件绑定到容器中或使用环境变量.Configs的操作方式与secret类似,不同的是它们没有在静止时加密,而是直接挂载到容器的文件系统中,而不使用RAM磁盘.配置可以在任何时候从服务中添加或删除,服务可以共享配置

docker swarm英文文档学习-12-在集群模式中的Raft共识

Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker swarm模式使用共识算法的原因是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致性状态.跨集群具有相同的一致状态意味着在出现故障时,任何管理器节点都可以接收任务并将服务恢复到稳定状态.例如,如果集群中负责调度任务的Leader Manager意外死亡,那么任何其他Manage

docker swarm英文文档学习-2-关键概念

参考https://docs.docker.com/engine/swarm/key-concepts/ Swarm mode key concepts集群模式关键概念 本主题介绍Docker Engine 1.12集群管理和编配特性特有的一些概念. What is a swarm? Docker引擎中嵌入的集群管理和编配功能是使用swarmkit构建的.Swarmkit是一个独立的项目,它实现了Docker的编配层,并直接在Docker中使用. 集群由多台以集群模式运行的Docker主机组成,

docker swarm英文文档学习-1-概述

参考https://docs.docker.com/engine/swarm/ Swarm mode overview群模式概述 Docker的当前版本包括集群模式,用于本地管理称为集群的Docker引擎集群.使用Docker CLI创建一个集群,将应用程序服务部署到一个集群,并管理集群行为. 1.突出特性: 1)与Docker引擎集成的集群管理 : 使用Docker引擎CLI创建一组Docker引擎的集群,你可以在其中部署应用程序服务.你不需要额外的编配软件来创建或管理集群. 2)去中心化设计

docker swarm英文文档学习-8-在集群中部署服务

Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运行服务容器的镜像名称和标记有多少容器参与服务是否有任何端口暴露给集群之外的客户端当Docker启动时,服务是否应该自动启动重启服务时发生的特定行为(例如是否使用滚动重启)服务可以运行的节点的特征(例如资源约束和位置首选项)有关群模式的概述,请参见 Swarm mode key concepts.有关

docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥

Lock your swarm to protect its encryption key上锁你的集群来保护你的加密密钥 在Docker 1.13及更高版本中,默认情况下,群管理器使用的Raft日志在磁盘上加密.这种静止加密保护你的服务的配置和数据不受获得加密Raft日志访问权的攻击者的攻击.引入该特性的原因之一是支持新的Docker secrets特性. 当Docker重新启动时,用于加密集群节点间通信的TLS密钥和用于加密和解密磁盘Raft日志的密钥都被加载到每个管理器节点的内存中.Dock

对英文文档中的单词与词组进行频率统计

一.程序分析 1.以只读模式读取文件到字符串 def process_file(path): try: with open(path, 'r') as file: text = file.read() except IOError: print("Read File Error!") return None return text 2.对字符串进行数据清洗,返回一个字典 import re word_list = re.sub('[^a-zA-Z0-9n]', ' ', textStr

统计英文文档频率前n单词

#coding:utf-8 #!/usr/bin/python2.6 def statistic_eng_text(): '''统计出英文文档中高频词汇''' cnt = Counter() np = os.path.join(get_project_path(),'doc','jack lodon.txt') ff = open(np,'r') words = ff.read() format_text = re.split('[\s\ \\,\;\.\!\n]+',words) for w

一篇英文文档中找出频数最多的10个单词

"""一篇英文文档中找出频数最多的10个单词collections: Counter 提供计数器工具以支持方便和快速的计数 most_common(n) 返回n个最常见元素及其计数的列表,从最常见到最少. 如果省略nNone,则 most_common()返回计数器中的所有元素."""import refrom collections import Counter# print(dir(Counter))with open('english.tx