简易中英小词典iDict v1.0发布[Github开源]

时间:2018-01-28 ┊ 阅读:4,342 次 ┊ 标签: 开发 , 编程 , 设计

用wpf写了一个小词典,方便自己使用。
20180128164509.jpg
20180128165619.png
20180128170538.png
20180128170350.png

功能:

  1. 简易查词
  2. 最小化系统托盘
  3. 设置开机启动

本站下载
Github下载
Github 源码

词典是用python爬的iciba词库,基本够用了。
下面是python抓取词典源码,现学现用。python上手就是简单。

# -*- coding:utf-8 -*-
import re
import time
import codecs
import socket
import urllib.request

socket.setdefaulttimeout(60)


def grabDict(strWord):
    strWord = strWord.strip()
    strWordUrl = urllib.parse.quote(strWord)
    boolRetry = True
    while boolRetry:
        try:
            response = urllib.request.urlopen('http://open.iciba.com/huaci/dict.php?word=' + strWordUrl)
        except:
            print("time out happen, wait 5 seconds...")
            time.sleep(5)
        else:
            boolRetry = False
    pattern = re.compile(r'<[^>]+>', re.S)
    regexStr = ".*?(<[\u4E00-\u9FA5]+>+)"
    regexBlk = "\\+s"
    for line in response:
        strLine = line.decode('utf-8')
        strLine = strLine.strip()
        if strLine.startswith("dict.innerHTML"):
            strLine = strLine.replace('\\"', '"')
            strLine = strLine.replace('\\\'s', "'s")
            # strLine = strLine.replace(strWord, '', 1)
            strLine = strLine.replace("dict.innerHTML='", "")
            matchStr = re.match(regexStr, strLine)
            while matchStr:
                matchWord = matchStr.group(1)
                replaceWd = matchWord.replace('<', '〈')
                replaceWd = replaceWd.replace('>', '〉')
                strLine = strLine.replace(matchWord, replaceWd)
                matchStr = re.match(regexStr, strLine)
            strLine = strLine.replace("生词本</a>", "")
            strLine = strLine.replace("详细释义</a>", "")
            strLine = strLine.replace("';", "")
            strLine = strLine.replace("]</strong>", "]~^~")
            strLine = strLine.replace("</p>", "~^~")
            strLine = strLine.replace("~^~;", ";")
            strLine = strLine.strip()
            strLine = pattern.sub('', strLine)
            # strLine = ''.join(strLine.strip().split())
            strLine = strLine.replace("\t", "").strip()
            if strLine[len(strLine) - 3: len(strLine)] == '~^~':
                strLine = strLine[0:len(strLine) - 3]
            if strLine[0:3] == '~^~':
                strLine = strLine[3:len(strLine)]
            strLine = strLine.replace('〈', '<')
            strLine = strLine.replace('〉', '>')
            strLineTmp = ""
            for strSec in strLine.strip().split("~^~"):
                strLineTmp += strSec.strip() + "~^~"
            if strLineTmp[len(strLineTmp) - 3: len(strLineTmp)] == '~^~':
                strLine = strLineTmp[0:len(strLineTmp) - 3]
            # strLine = strLine.replace("                    ", "")
            strLine = re.sub(r'\s+', ' ', strLine)
            if strLine.startswith(strWord):
                strLine = strLine.replace(strWord, '', 1)
            strLine = strLine.strip()
            return strLine


# strDict = grabDict("斯")
# print(strDict)
file_in = open('iDict.bin')
idx = 0
for linef in file_in:
    strLineWord = linef.split('\t')[0].strip()
    strUrlWord = grabDict(strLineWord)
    if strUrlWord == "以上为百度翻译结果":
        strLineFull = strLineWord + '\t' + linef.split('\t')[1].strip() + '\r\n'
    else:
        strLineFull = strLineWord + '\t' + strUrlWord + '\r\n'
    file_ot = codecs.open('iDict_new.bin', 'a', 'utf-8')
    file_ot.write(strLineFull)
    file_ot.close()
    idx += 1
    print('we have grabbed ' + str(idx) + ' words.')
    time.sleep(0.2)
file_in.close()

词典app是用C#编写,基于WPF视图,源码有空我放到github上。

文章评论

仅有1条评论

  1. 自己终于可以用上干净的小词典了。

添加新评论

温馨提醒:如果您是第一次在本站留言,需要审核后才能显示哦!

相关文章

popup.js怎么和content.js通信?[JQuery]

popup.js怎么和content.js通信?[JQuery]

这两天为了实现一个谷歌浏览器插件功能,研究了半天怎么让插件来改特定网页里的特定字段的值,而这个值又来自popup的网页预先设定,下一步实现动态加载,可以让更多组实现便利。 目的很简单,我们有一个list,需要填到网页的某个字段,当然是好几个,这些值是设定好的,网页系统我们没法改,input想...
阅读全文>>
如何绕过登录抓取js动态加载网页数据[Python]

如何绕过登录抓取js动态加载网页数据[Python]

今天经历了一翻折腾,把一个需要登录网站并js动态加载的数据一一给抓下来了。 首先,登录时有cookie,我们需要把cookie保存下来,用urllib2构建request时加入header信息,这时还多了一点,虚构了浏览器信息,让服务器以为是正常的浏览器发起的请求,这样可以绕过简单的反爬虫策略...
阅读全文>>
终于用上了专业版的PyCharm含激活方法链接[Python]

终于用上了专业版的PyCharm含激活方法链接[Python]

就直接上图片吧: 激活方法链接:https://www.cnblogs.com/pupilheart/p/9734124.html
阅读全文>>
如何使SyntaxHighlighter长代码自动换行[js/css]

如何使SyntaxHighlighter长代码自动换行[js/css]

用SyntaxHighlighter高亮代码,最近发现下面有个滚动条不好看, 代码太长造成的,去掉滚动条让长代码能自动换行,就好了。 打开样式表shCoreDefault.css 22行,把white-space: pre !important;改为white-space: pre-wrap ...
阅读全文>>
为AS/400命令创建帮助页面[GENCMDDOC]

为AS/400命令创建帮助页面[GENCMDDOC]

用到命令: Generate Command Documentation (GENCMDDOC) command. GENCMDDOC CMD(MYLIB/mycmd) TODIR('/qsys.lib/mylib.lib/qpnlsrc.file') ...
阅读全文>>