
標題無意冒犯,就是覺得這個廣告挺好玩的
上面這張思維導圖喜歡就拿走,反正我也學不了這么多
文章目錄
- 前言
- 歡迎來到我們的圈子
- 攤牌啦,《偷偷學Python》系列即將進入一段漫長的XXX
- 《Python百戰穿山甲》(一):翻譯軟體
- 設計圖
前言
前期回顧:我要偷偷學Python(第十三天)
又一篇爆款啊,
插播一條推送:(如果是小白的話,可以看一下下面這一段)
歡迎來到我們的圈子
我建了一個Python學習答疑群,有興趣的朋友可以了解一下:這是個什么群
群里已經有一千多個小伙伴了哦!!!
直通群的傳送門:傳送門
本系列文默認各位有一定的C或C++基礎,因為我是學了點C++的皮毛之后入手的Python,這里也要感謝齊鋒學長送來的支持,
本系列文默認各位會百度,學習‘模塊’這個模塊的話,還是建議大家有自己的編輯器和編譯器的,上一篇已經給大家做了推薦啦?
我要的不多,點個關注就好啦
然后呢,本系列的目錄嘛,說實話我個人比較傾向于那兩本 Primer Plus,所以就跟著它們的目錄結構吧,
本系列也會著重培養各位的自主動手能力,畢竟我不可能把所有知識點都給你講到,所以自己解決需求的能力就尤為重要,所以我在文中埋得坑請不要把它們看成坑,那是我留給你們的鍛煉機會,請各顯神通,自行解決,
攤牌啦,《偷偷學Python》系列即將進入一段漫長的XXX
漫長的《爬蟲百戰》時期啦,
對,接下來會放出大量的小專案實操,有些會帶上經濟效益,有些純粹練著好玩,
當然,寫著好玩的小專案肯定不會全寫完,但是我會做成一個高可拓展的專案,把介面明確了,大家有意愿的話就自行拓展,
《Python百戰穿山甲》(一):翻譯軟體
為什么我會想做這個呢?好玩唄,我關注了幾個“爬蟲百戰”的專欄,先挑了這個來做,不過他們大多是只能翻譯一個單詞的,那我也會啊,沒意思,
在我的不懈努力之下,我爬呀爬,爬呀爬,終于爬到了一個大佬,他把人家的加密演算法給破解了,
事情是這樣的:為什么大部分的博客都只提供單個單詞的翻譯呢?因為他們沒辦法提供多個單詞翻譯,而且他們能抓到的單詞釋義也是有限的,算了,還是放圖吧,感覺不放圖講不清楚了今天:

吶,他們都是用這個叫做sug的不完全包,我剛開始在百度翻譯上確實也能抓出這樣的包,但是在有道上刷不出來,
其實是應該用這張圖里面的第一個的那種包,但是那個包有加密,在百度翻譯上面,你要帶上cookie,還有兩個秘鑰,暫且算是秘鑰,因為這些東西都是跟隨單詞而變化的,所以如果每個都是抓包,拆包,那其實沒什么意義了,
這時候,有個大佬發現了其中的規律,于是他用一頓猛如虎的操作,吶:https://blog.csdn.net/nunchakushuang/article/details/75294947
好極,破解了,
然后就有了我們后面的操作,
以下這段代碼是我們群里的小伙伴肆柒和我一起協作完成的,我把改好的演算法給他,他配備上了UI,
import urllib.request
import requests
import urllib.parse
import json
import time
import random
import hashlib
import tkinter
from tkinter import ttk
text = ""
# 清空輸入框
def qing_kong(shu_ru):
shu_ru.delete(0, tkinter.END)
# 確定開始查詢
def que_ding(a, b, content, shu_chu):
global text
# content = input('請輸入需要翻譯的內容:')
# from_s = input("請輸入待翻譯的語種,中文請輸入ZH,英文請輸入EN:")
# to_s = input("請輸入目標語種,中文請輸入ZH,英文請輸入EN:")
if a == "漢語":
from_s = 'ZH'
else:
from_s = 'EN'
if a == "英語":
to_s = 'EN'
else:
to_s = 'ZH'
# url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=https://www.google.com/'
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
u = 'fanyideskweb'
d = content
f = str(int(time.time() * 1000) + random.randint(1, 10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4'
sign = hashlib.md5((u + d + f + c).encode('utf-8')).hexdigest()
data['i'] = content
data['from'] = from_s
data['to'] = to_s
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = f
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CL1CKBUTTON'
data['typoResult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf-8')
res = requests.post(url, data=data)
request = urllib.request.Request(url=url, data=data, method='POST')
response = urllib.request.urlopen(request)
# print(response.read().decode('utf-8'))
pre_js = response.read().decode('utf-8')
# pat=re.compile(r'[\u4e00-\u9fa5]+')
# result=pat.findall(pre_js)
# result = '\n'.join(result[5:])
a = pre_js.split('[[')
b = a[1].split(']]')
c = b[0]
j = json.loads(c)
text = j['tgt']
shu_chu.set(text)
print(j['tgt'])
# for i in result:
# print(i+'\n')
# print(pre_js)
# 主函式
def jie_main():
global text
win = tkinter.Tk()
win.title("翻譯")
win.geometry("500x400")
win.resizable(0, 0)
shu_chu = tkinter.StringVar()
shu_chu.set(text)
tkinter.Label(win, text='翻譯', font=('Arial', 12)).place(x=100, y=30, anchor='nw')
tkinter.Label(win, text='翻譯語言選項', font=('Arial', 12)).place(x=10, y=70, anchor='nw')
yu_yan1 = ttk.Combobox(win, width=10)
yu_yan1['value'] = ('漢語', '英語')
yu_yan1.current(0)
yu_yan1.place(x=120, y=70, anchor='nw')
tkinter.Label(win, text='》》》', font=('Arial', 12)).place(x=220, y=70, anchor='nw')
yu_yan2 = ttk.Combobox(win, width=10)
yu_yan2['value'] = ('英語', '漢語')
yu_yan2.current(0)
yu_yan2.place(x=270, y=70, anchor='nw')
tx1 = tkinter.Label(win, text='原文:', font=('Arial', 12))
tx1.place(x=10, y=120, anchor='nw')
shu_ru = tkinter.Entry(win)
shu_ru.place(x=120, y=120, anchor='nw')
guess = shu_ru.get()
tx2 = tkinter.Label(win, text='譯文:', font=('Arial', 12))
tx2.place(x=10, y=160, anchor='nw')
tkinter.Label(win, textvariable=shu_chu, font=('Arial', 12)).place(x=100, y=160, anchor='nw')
bt1 = tkinter.Button(win, text='清空', command=lambda: qing_kong(shu_ru))
bt1.place(x=10, y=210, anchor='nw')
bt2 = tkinter.Button(win, text='確定', command=lambda: que_ding(yu_yan1.get(), yu_yan2.get(), shu_ru.get(), shu_chu))
bt2.place(x=100, y=210, anchor='nw')
win.mainloop()
if __name__ == '__main__':
jie_main()
設計圖

感覺好像也沒什么可拓展的了嘛,除了那個語言模塊那邊,
應該是我們的小伙伴做的太完善了已經,
我來說一下我的想法啊,長話短說吧,再不說完等下來不及審核了,
建造者模式,

場景類從語種類中獲取所有的語種類別,然后填充到UI類的下拉框中,場景類開放,演算法和UI封閉,
草率了點,UML都沒開,,,
見諒啊,
如果大家有任何疑惑,可以直接問我,也可以了解一下什么是建造者模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225357.html
標籤:python
下一篇:Python入門基礎語法知識5
