因为要考英语四级,所以我今天一大早就起来被英语单词,但是作为英语渣渣的我,只能是在网页上挨个查单词的意思。查的多了,心生厌倦,便想着如何才能在终端下查单词,那样速度不就很快了?

NOW,我仔细观察每次查询时,浏览器地址栏中URL的变化,发现每次浏览器提交的URL都是"http://www.youdao.com/w/eng/"xxxxx"/#keyfrom=dict2.index"(其中的xxxxx代表要查的单词),有了这个发现,那我们将URL指向的网页下载下来,然后提取我们需要的信息不就得了?

这个工作交给Python来做是最合适不过的了

因为要英汉互译,所以我写了两段代码,第一个是汉译英,第二个是英译汉。(最后将两段代码合起来实现自动识别英语或汉语,但是正确性和效率比分开写差那么一点点,不过大多数时间我还是查英语的汉语意思)

源代码

汉译英:

import requests,re

def download(): word=input("请输入您要翻译的中文词语:\n") url="http://dict.youdao.com/w/eng/"+word+"/#keyfrom=dict2.index" #合并URL地址 html=requests.get(url).content.decode('utf-8') #得到服务器的相应信息后将其转码为UTF-8 return html def analysis(): list1=re.findall("详细释义.+<p class=\"collapse-content\">",download(),re.S) #这里对html字符串进行第一步加工,截取大概的信息 list2=re.findall(" [a-zA-Z ]+",str(list1)) #将上面加工后的字符串进一步加工,直接提取到所有翻译后的单词信息 print("翻译结果:\n") for i in list2: i=i.strip() #因为第二步加工后的信息并不干净,得到的单词前面会有空格,这里将空格删去 print(i) if __name__ == '__main__':   while(1):
    analysis()

英译汉:

import requests,re

def download():
    word=input("请输入您要翻译的英文单词:\n")
    url="http://dict.youdao.com/w/eng/"+word+"/#keyfrom=dict2.index"
    html=requests.get(url).content.decode('utf-8')
    return html

def analysis():
    list1=re.findall("详细释义.+<p class=\"collapse-content\">",download(),re.S)
    list2=re.findall("                \w+",str(list1))       #只有此处代码与汉译英代码不同,因为是提取汉字,所以这里要用\w来匹配汉字
    print("翻译结果:\n")
    for i in list2:
        i=i.strip()
        print(i)

if __name__ == '__main__':
  while(1):
    analysis()

合并后:

import requests,re

def analysis():
    word=input("请输入您要翻译的内容: ")
    url="http://dict.youdao.com/w/eng/"+word+"/#keyfrom=dict2.index"
    html=requests.get(url).content.decode('utf-8')
    print("翻译结果:")
    if ord(word[0].lower()) in range(97,123):   #将输入的第一个字节转换为数字,如果数字的值在97到123之间输入的一定是英语,否则输入的是汉语
        result=re.findall(r"(?<=                )\w+(?=</span>)",html)  #匹配翻译后的汉语
        for i in result:
                print(i)
    else:
        result=re.findall(r"(?<=                )[a-zA-Z ]+(?=</span>)",html) #匹配翻译后的英语
        for i in result:
            if ord(i[0].lower()) in range(97,123):   #上一步提取到的信息列表中有无用项(正则表达式中的空格造成的),这里过滤一下
                print(i)
if __name__ == '__main__':
    while(1):
        analysis()

OK,来看看效果吧:

emmmm,OK,发完博客还要继续背单词【伤心】【伤心】【伤心】

python实现查有道词典的更多相关文章

  1. python学习笔记:"爬虫+有道词典"实现一个简单的英译汉程序

    1.有道的翻译 网页:www.youdao.com Fig1 Fig2 Fig3 Fig4 再次点击"自动翻译"->选中'Network'->选中'第一项',如下: F ...

  2. python:爬虫1——实战(下载一张图片、用Python模拟浏览器,通过在线的有道词典来对文本翻译)

    一.下载一只猫 import urllib.request response = urllib.request.urlopen("http://cdn.duitang.com/uploads ...

  3. Python下载一张图片与有道词典

    1.下载一张图片代码1 import urllib.request response = urllib.request.urlopen('http://photocdn.sohu.com/201009 ...

  4. python "爬虫+有道词典"实现一个简单翻译程序

    抓包软件使用的是Fiddler4 新版的查询接口 比较负责,引入了salt和sign http://fanyi.youdao.com/translate?smartresult=dict&sm ...

  5. 基于pygtk的linux有道词典

    基于pygtk的linux有道词典 一.桌面词典设计 想把Linux用作桌面系统,其中一部分障碍就是Linux上没有像有道一样简单易用的词典.其实我们完全可以自己开发一款桌面词典, 而且开发一款桌面词 ...

  6. mac 10.9开启有道词典取词功能

    取词时候,有道词典给出提示,说要去开启辅助功能,但提示的是在mac 10.8上面怎么操作,在10.9的话,就是以下位置去改了. 补充以下: 在mac机器上,实际上大多数的单词都能从自带的词典中查找到. ...

  7. 爬虫破解js加密(一) 有道词典js加密参数 sign破解

    在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...

  8. 必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】

    1.序言: 随着手机功能的不断更新和推广,手机应用市场的竞争变得愈发激烈.这次我们选择必应词典和有道词典的苹果客户端作对比,进一步分析这两款词典的客户端在功能和用户体验方面的利弊.这次测评的主要评测人 ...

  9. 调用网易有道词典api

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...

随机推荐

  1. mybatis 架构

    官网地址:http://code.google.com/p/mybatis/ 版本:mybatis 3.2.3 生成工具:mybatis-generator-core-1.3.2-bundle.zip ...

  2. Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据

    这是bundle是传输不了数据的,获取到 出现这种情况的原因是非activity类中不存在Context,而在活动中传输数据时需要Context. 我收集到了两种解决方法. 1. 在调用该Adapte ...

  3. LCM Cardinality 暴力

    LCM Cardinality Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit St ...

  4. Elixir游戏服设计二

    搞一个例子,而没有实际的目标,做起来真是烦人.几次三番都想放弃. 后来想想,即使最后完成不了完整的服务器,把需要的知识点搞搞,摸熟悉也是好的. 这里没有完整的项目目录,主要是对需要的指点进行整理.要完 ...

  5. 使用Entify Framework 6.x的事务操作

    public void TransactionsTest() { using (var context = new testContext()) { //使用EF事务 在vs2013中先升级Entit ...

  6. 51nod 1593 公园晨跑 | ST表(线段树?)思维题

    51nod 1593 公园晨跑 有一只猴子,他生活在一个环形的公园里.有n棵树围绕着公园.第i棵树和第i+1棵树之间的距离是 di ,而第n棵树和第一棵树之间的距离是 dn .第i棵树的高度是 hi ...

  7. checkValidity-表达验证方法。

    调用该方法,可以显示对表单元素进行有效验证,返回值是boolean. 代码如下: <!DOCTYPE html> <html> <head> <meta ch ...

  8. MyBatis开发中解决返回字段不全的问题

    场景重现: mybatis 在查询的时候,可以返回Map,但是一旦这个字段为空(null)的时候,map里就没有了.我用的是mysql数据库,除了在查询语句上做ifnull判断给它默认值外,有没的别的 ...

  9. 当谈到 GitLab CI 的时候,我们该聊些什么(上篇)

    "微服务"这个概念近两年非常热,正在慢慢改变 DevOps 的思路.微服务架构把一个庞大的业务系统拆解开来,每一个组件变得更加独立自治.松耦合.但是,同时也伴随着部署单元粒度越来越 ...

  10. nginx知识点简单回顾

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...