我要偷偷的学Python,然后惊呆所有人(第十四天)
标题无意冒犯,就是觉得这个广告挺好玩的
上面这张思维导图喜欢就拿走,反正我也学不了这么多
文章目录
前言
前期回顾:我要偷偷学Python(第十三天)
又一篇爆款啊。
插播一条推送:(如果是小白的话,可以看一下下面这一段)
欢迎来到我们的圈子
我建了一个Python学习答疑群,有兴趣的朋友可以了解一下:这是个什么群
群里已经有一千多个小伙伴了哦!!!
直通群的传送门:传送门
本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。 本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦? 我要的不多,点个关注就好啦 然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。 本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。
摊牌啦,《偷偷学Python》系列即将进入一段漫长的XXX
漫长的《爬虫百战》时期啦。
对,接下来会放出大量的小项目实操,有些会带上经济效益,有些纯粹练着好玩。
当然,写着好玩的小项目肯定不会全写完,但是我会做成一个高可拓展的项目,把接口明确了,大家有意愿的话就自行拓展。
《Python百战穿山甲》(一):翻译软件
为什么我会想做这个呢?好玩呗,我关注了几个“爬虫百战”的专栏,先挑了这个来做,不过他们大多是只能翻译一个单词的,那我也会啊,没意思。
在我的不懈努力之下,我爬呀爬,爬呀爬,终于爬到了一个大佬,他把人家的加密算法 20000 给破解了。
事情是这样的:为什么大部分的博客都只提供单个单词的翻译呢?因为他们没办法提供多个单词翻译,而且他们能抓到的单词释义也是有限的,算了,还是放图吧,感觉不放图讲不清楚了今天:
呐,他们都是用这个叫做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都没开。。。
见谅啊。
如果大家有任何疑惑,可以直接问我,也可以了解一下什么是建造者模式
- 我要偷偷的学Python,然后惊呆所有人(第四天)
- 你要自己悄悄地学习Python,然后惊艳所有人,最全面Python教程,建议收藏
- 前两篇的总结:mac python实现数据库读取ip,然后显示截图保存
- python 读文件,然后转化为矩阵的实例
- Python创建函数实现用户输入,计算,然后输出
- Python编程惯例(网上找的一些资料,然后自己整理了一下)
- python练习题(四十八):从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
- python 转化object 到json 然后存入redis以及从redis读取
- 利用urllib读取JSON,然后将JSON解析为Python对象 —— python学习笔记
- 利用python读取文件 然后以表格的形式打印出去
- 安装完Python包然后找不到模块问题解决
- python 对一篇文章,按逗号分成一句一句的,然后在这篇文章中找到与某个句子类似的句子(包含相同的词)
- python:按行读入,排序然后输出的方法
- linux下安装DB2,然后python连接DB2
- python学习第十四天 -面向对象编程基础
- Python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径 ,请确保路径正确,然后再试一次。
- numpy数组与python的list互转,然后用json写入文件与c交互
- python脚本采集服务器数据通过API提交到django web服务器,然后展示在页面上
- 7-2然后是几点(python3)
- python通过键盘输入一串小写字母(a~z)组成的字符串,编写一个测试程序,将字符串中连续出现的重复字符删去(即在一个字符串中,如果遇到连续重复的字符只出现一次),然后输出处理后的字符串。