免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3554 | 回复: 11
打印 上一主题 下一主题

在线词典 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-19 22:03 |只看该作者 |倒序浏览
从dict.cn取词。d.py

  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import urllib,re,sys

  4. def unquote(q):
  5.         '''在unicode终端下可以显示音标。'''
  6.         return re.sub('&#(\d{1,5});',lambda m:unichr(int(m.group(1))),q).encode('utf8')

  7. if __name__=="__main__":
  8.         if len(sys.argv)==1:
  9.                 print "请输入单词"
  10.                 sys.exit(0)
  11.         else:
  12.                 word=sys.argv[1]
  13.         response = urllib.urlopen("http://www.dict.cn/"+word+".htm")
  14.         result=response.read()
  15.         find=re.findall(r'您要查找的是不是',result,re.S)
  16.         if len(find)>=1:
  17.                 print "没找到"
  18.                 sys.exit(0)
  19.                
  20.         list=re.findall(r"<table><tr>(.+?)添加生词",result,re.S)
  21.         pronounce=re.findall(r'<span class="pronounce">(.+?)</span>',list[0])
  22.         jies=re.findall(r'<div class="mut_jies"><strong>(.+?)</strong></div>',list[0])
  23.         ol=re.findall(r'<ol class="mut_ol">(.+?)</ol>',list[0],re.S)
  24.         if len(ol)>=1:
  25.                 example=re.findall(r'<li>(.+?)</li>',ol[0],re.S)
  26.         print word,
  27.         if len(pronounce)>=1:
  28.                 print unquote(pronounce[0])  
  29.         print re.sub('<br />','\n',jies[0])
  30.         print
  31.         if len(ol)>=1:
  32.                 for i in range(len(example)):
  33.                         print str(i+1)+'.',re.sub('<.+?>','',example[i]),
  34.                


复制代码

[ 本帖最后由 two 于 2009-8-21 11:42 编辑 ]

rrr.GIF (15.75 KB, 下载次数: 37)

rrr.GIF

评分

参与人数 1可用积分 +2 收起 理由
smallfish_xy + 2 原创内容

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2009-08-19 22:08 |只看该作者
显示音标:

SHN3IR~U.PNG (56.08 KB, 下载次数: 31)

SHN3IR~U.PNG

论坛徽章:
0
3 [报告]
发表于 2009-08-20 00:08 |只看该作者
原帖由 two 于 2009-8-19 22:03 发表
从dict.cn取词。d.py

#! /usr/bin/python
# -*- coding: utf-8 -*-
import urllib,re,sys

def unquote(q):
        '''在unicode终端下可以显示音标。'''
        return re.sub('&#(\d{1,5});',lambda m:unichr( ...


dict.cn有api的啊。。 何须正则这么麻烦

我在这里扔过一个qt版本的

http://www.javaeye.com/topic/434185

论坛徽章:
0
4 [报告]
发表于 2009-08-20 08:36 |只看该作者
哈哈,看到这个觉得俺以前写的那个实在太囧了。

论坛徽章:
0
5 [报告]
发表于 2009-08-20 11:24 |只看该作者
事实上,dict.cn在自己页面上的解释和例句比api调用返回的多多了

论坛徽章:
0
6 [报告]
发表于 2009-08-20 12:33 |只看该作者
好!
不过有个问题想起来,如果网页用脚本(js)所写,用正则怎么去处理,如果java脚本是一个函数,而这个函数可能就是下载?——python能否处理java脚本?
——多谢!

论坛徽章:
0
7 [报告]
发表于 2009-08-20 13:16 |只看该作者
原帖由 nietsche 于 2009-8-20 12:33 发表
python能否处理java脚本?
——多谢!


纠正一下,java脚本还是叫做javascript吧。
如果网页用脚本(js)所写
能否给个具体例子?

论坛徽章:
0
8 [报告]
发表于 2009-08-20 16:06 |只看该作者

回复 #6 nietsche 的帖子

是不是想解析google的翻译?

论坛徽章:
0
9 [报告]
发表于 2009-08-20 16:09 |只看该作者
哈哈,本着学习的态度改了一下3楼的程序

#!/usr/bin/env python
# coding:utf-8

import urllib
import sys
import traceback
import re
from xml.etree.ElementTree import parse



def lookup(word):

&nbsp;&nbsp;&nbsp;&nbsp;dict_url="http://dict.cn/ws.php?utf8=true&q=%s"
&nbsp;&nbsp;&nbsp;&nbsp;url = dict_url % word
&nbsp;&nbsp;&nbsp;&nbsp;resXML = parse(urllib.urlopen(url)).getroot()
&nbsp;&nbsp;&nbsp;&nbsp;p = resXML.find("pron")
&nbsp;&nbsp;&nbsp;&nbsp;d = resXML.find("def")

&nbsp;&nbsp;&nbsp;&nbsp;if  p == None:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;word = "[%s]" % word
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url = dict_url % word
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suggestion = parse(urllib.urlopen(url)).getroot()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;referenceWords = ",".join([i.text for i in suggestion.findall("sugg")])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "也许您要查找的是:" , referenceWords
&nbsp;&nbsp;&nbsp;&nbsp;else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "音:" ,p.text
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "含义:" ,d.text
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print resXML.findall("sent")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i,sent in enumerate(resXML.findall("sent")):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print i,sent[0].text
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "  " + sent[1].text

if __name__ == "__main__":
&nbsp;&nbsp;&nbsp;&nbsp;while(True):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;word = raw_input("\n输入您要查询的单词(88是退出):")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if word == "88":
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elif re.search("^([a-zA-Z]*)$",word)==None:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "Does not support C to E"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lookup(word)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except Exception,e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print traceback.format_exc()


[ 本帖最后由 wolfg 于 2009-8-20 17:33 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-08-20 19:17 |只看该作者
原帖由 fmail 于 2009-8-20 00:08 发表


dict.cn有api的啊。。 何须正则这么麻烦

我在这里扔过一个qt版本的

http://www.javaeye.com/topic/434185


真是太囧囧囧囧囧了。
原来有个接口,还傻乎乎的一个个searching。


多谢指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP