数据来源:bing词典
来源于以前写的爬虫小项目,现在完善了下,加入了单词保存及导出word的功能。(其实说不上完善{:1_907:} )
比如判断是否存在数据库文件之类的功能也没加上,暂且直接用附件的文件吧 。
估计会有许多bug,由于个人原因没法完成,仅作交流学习,欢迎各路大佬前来指正!{:1_921:}
[Python] 纯文本查看 复制代码import requests
import re
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from ttkbootstrap.dialogs import Messagebox
import sqlite3
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
def search(word):
P = {
"q": f"{word}"
}
resp = s.get(url=url, params=P)
goal = resp.text
obj = re.compile(
r'.*?)" />')
it = obj.search(goal)
try:
meaning = it.group("meaning")
res = word + "\n" + meaning + "\n"
wlist.append([word, meaning])
return res
except:
return f"对不起,查询{word}无果\n"
def append_word(word, meaning):
try:
c.execute(
f"INSERT INTO words (word,meaning) VALUES ('{word}', '{meaning}')")
conn.commit()
except:
return -1
else:
return 0
def db_get():
return c.execute("SELECT word,meaning from words")
def db_update():
count = len(wlist)
f_c = 0
for i in wlist:
f_c += append_word(i[0], i[1])
Messagebox().show_info(message=f"{count+f_c}个添加成功,{0-f_c}个失败")
def db_delete(window):
try:
c.execute("delete from words")
except:
Messagebox().show_error(parent=window, message='错误')
else:
Messagebox().show_info(parent=window, message='成功')
def to_word(window):
doc = Document()
for row in db_get():
p1 = doc.add_paragraph()
w = p1.add_run(row[0])
w.bold = True
w.font.name = 'Times New Roman'
w.font.size = Pt(15)
p2 = doc.add_paragraph()
p = p2.add_run(row[1].split(',')[:2])
p.bold = True
p.font.name = '微软雅黑'
p._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
p.font.size = Pt(9)
p2.add_run('\t')
m = p2.add_run(row[1].split(',')[2:])
m.font.name = '微软雅黑'
m._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
m.font.size = Pt(10)
doc.save('单词表.docx')
Messagebox().show_info(parent=window, message='成功')
def check_word():
window = ttk.Toplevel(title='单词库')
window.protocol("WM_DELETE_WINDOW", window.destroy)
tv = ttk.Treeview(
master=window,
columns=[0, 1],
show=HEADINGS,
)
tv.heading(0, text='单词')
tv.heading(1, text='释义')
tv.column(0, width=60)
tv.column(1, width=1000, anchor=W)
cursor = db_get()
for row in cursor:
tv.insert('', END, values=(row[0], row[1]))
# print("word=", row[0])
# print("meaning = ", row[1], "\n")
tv.pack(side=LEFT, anchor=NE, fill=X)
def delete():
if Messagebox().yesno(parent=window, message='你确定?') == "确认":
obj = tv.get_children() # 获取所有对象
for o in obj:
tv.delete(o) # 删除对象
db_delete(window)
else:
return
def b_to_word():
to_word(window)
ttk.Button(window, text='删库', command=delete).pack(side=RIGHT)
ttk.Button(window, text='导出word', command=b_to_word).pack(side=LEFT)
window.mainloop()
def appear():
text.config(state='normal')
text.insert('end', search(input.get()))
text.config(state='disable')
def root_close():
conn.commit()
conn.close()
s.close()
root.destroy()
def cls():
wlist.clear()
text.config(state='normal')
text.delete(1.0, "end")
text.config(state='disable')
url = "https://cn.bing.com/dict/search"
s = requests.session()
conn = sqlite3.connect('wordlist.db')
c = conn.cursor()
wlist = []
root = ttk.Window(title="词典")
ttk.Label(root, text="欢迎来到词典,内容来源于网络 55229lwj").grid(row=0, column=0)
input = ttk.Entry(root)
text = ttk.ScrolledText(root)
text.grid(row=1, column=2)
text.config(state='disable')
input.grid(row=1, column=0)
ttk.Button(root, text="查询", command=appear).grid(row=1, column=1)
ttk.Button(root, text="清空", command=cls).grid(row=2, column=3)
ttk.Button(root, text="添加入库", command=db_update).grid(row=2, column=2)
ttk.Button(root, text="查看库中单词", command=check_word).grid(row=1, column=3)
root.protocol("WM_DELETE_WINDOW", root_close)
if __name__ == '__main__':
root.mainloop()