Python—实训day3—简单的在线翻译程序
4 發(fā)送POST請(qǐng)求
4.3 用poster獲取有道在線翻譯
參考有道翻譯:http://fanyi.youdao.com/
通過(guò)Fiddler工具可以獲取到
請(qǐng)求的URL地址為:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
提交的請(qǐng)求體參數(shù)
i=hello&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=16002154063071&sign=37d97277cb051e71959e772b91309b2b<s=1600215406307&bv=7e14dfdb6b3686cc5af5e5294aaded19&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME
其中,關(guān)鍵參數(shù):
i:要翻譯的單詞
salt:鹽值
sign:簽名
鹽值和簽名是后臺(tái)反爬蟲的機(jī)制
使用poster來(lái)模擬發(fā)送post請(qǐng)求
但是會(huì)出現(xiàn) {"errorCode":50} 錯(cuò)誤,因?yàn)榉?wù)器有反爬蟲機(jī)制
只要鹽值和簽名不同,就會(huì)報(bào)錯(cuò)
經(jīng)過(guò)網(wǎng)上大神指點(diǎn),把translate_o改為translate即可
4.4 用python實(shí)現(xiàn)簡(jiǎn)單的在線翻譯程序
from urllib import request, parse import ssl import random# 常用User-Agent列表 ua_list = ['User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)', ] # 加載一個(gè)頁(yè)面 def loadPage(url, word):# 在ua_list列表中隨機(jī)選擇一個(gè)UserAgentuserAgent = random.choice(ua_list)headers = {'User-Agent': userAgent}# 發(fā)起一個(gè)請(qǐng)求req = request.Request(url, headers = headers)# 創(chuàng)建未經(jīng)過(guò)驗(yàn)證的上下文的代碼context = ssl._create_unverified_context()data = {'i': word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '16002154063071','sign': '37d97277cb051e71959e772b91309b2b','lts': '1600215406307','bv': '7e14dfdb6b3686cc5af5e5294aaded19','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}data = parse.urlencode(data).encode('utf-8')# 打開響應(yīng)的對(duì)象response = request.urlopen(req, context=context, data=data)# 獲取響應(yīng)的內(nèi)容html = response.read()# 對(duì)獲取到的unicode編碼進(jìn)行解碼content = html.decode('utf-8')return content import json def fanyi(word):url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'content = loadPage(url, word)jsondicts = json.loads(content)return jsondicts['translateResult'][0][0]['tgt']if __name__ == '__main__':word = input('請(qǐng)輸入要翻譯的單詞:')result = fanyi(word)print('翻譯的結(jié)果為:', result)5.1 面向?qū)ο蠛兔嫦蜻^(guò)程5 Python面向?qū)ο?/p>
面向過(guò)程:C、匯編、Basic、Pascal
面向?qū)ο?#xff1a;C++、Java、Python、PHP、……
面向過(guò)程基于計(jì)算機(jī)的角度出發(fā)考慮問(wèn)題
面向?qū)ο笫菑娜?#xff08;第三者)的角度出發(fā)考慮問(wèn)題
比如:學(xué)生上學(xué)
面向過(guò)程
| 起床 洗刷刷 穿衣打扮 出門,往教室方向走 if 遇到十字路口: while 紅燈亮: 等待綠燈 走到教室 while 上課時(shí)間未到: 等待上課 開始上課 while 下課時(shí)間未到: 等待下課 走出教室 吃飯 睡覺(jué) |
面向?qū)ο?/p>
| 定義一個(gè)學(xué)生類 定義學(xué)生類的屬性:姓名、年齡、專業(yè)、年級(jí)、…… 定義學(xué)生類的方法:吃飯()、睡覺(jué)()、上學(xué)()、放學(xué)()、…… 定義一個(gè)教室類 定義教室類的屬性:位置、容量、…… 定義教室類的方法:開門()、關(guān)門() 定義學(xué)生類的對(duì)象:zhangsan 定義教室類的對(duì)象:417 zhangsan.上學(xué)(417) |
總結(jié):
面向?qū)ο?#xff1a;適合組織大規(guī)模的軟件開發(fā)
面向過(guò)程:底層、快捷、高效
5.2 什么是對(duì)象
天上飛的:飛機(jī)、大炮、鳥、鷹、……
地上跑的:雞鴨鵝、豬牛羊
水里游的:魚蝦蟹、……
抽象的概念:項(xiàng)目、規(guī)范、原理、方法、……
世界上萬(wàn)事萬(wàn)物都是對(duì)象
5.3 區(qū)分類和對(duì)象
思考:
1 狗是類 狗是對(duì)象
2 張三是類 張三是對(duì)象
結(jié)論:對(duì)象更具體、類更抽象
一個(gè)類中可以包含多個(gè)對(duì)象
類是某一種對(duì)象的集合(總稱)
面向?qū)ο缶幊?/p>
5.4 Python中聲明類和創(chuàng)建對(duì)象
聲明類:使用關(guān)鍵字 class
約定規(guī)矩:類名首字母必須大寫
# 聲明一個(gè)類 class Dog:pass創(chuàng)建類的對(duì)象
dog1 = Dog() print(dog1) # ain__.Dog object at 0x000002AEA3FDFA58> print(type(dog1)) # s '__main__.Dog'>Dog是類,dog1是Dog的對(duì)象
我們是面向?qū)ο蟮木幊?#xff0c;實(shí)際上是使用dog1進(jìn)行編程
5.5 屬性
屬性是對(duì)象所擁有的特征
設(shè)置屬性
# 聲明一個(gè)類 class Dog:pass dog1 = Dog() # 設(shè)置狗的屬性 dog1.name = '旺財(cái)' dog1.age = 13 dog1.sex = 'male' # 讀取狗的屬性 print(dog1.name) print(dog1.age) print(dog1.sex)如果想要查看類的屬性和方法,可以通過(guò)dir() 函數(shù)查看
dog1 = Dog() print(dir(dog1)) # 設(shè)置狗的屬性 dog1.name = '旺財(cái)' dog1.age = 13 dog1.sex = 'male' print(dir(dog1))發(fā)現(xiàn)屬性是臨時(shí)添加上去的
如果希望屬性是固定在類中的,需要把這些屬性寫到類的實(shí)現(xiàn)代碼中
class Dog:name = '' # 姓名age = 0 # 年齡sex = 'female' # 性別dog1 = Dog() print(dir(dog1)) dog2 = Dog() print(dir(dog2))5.6 方法
方法是類的對(duì)象的一系列的操作
需要在類中定義方法
| def 方法名(方法的參數(shù)): 方法的實(shí)現(xiàn)代碼 方法的返回值 |
注意:方法名首字母必須小寫
class Dog:# 狗叫的方法def bark(self):print('旺')dog1 = Dog() dog1.bark()方法可以傳遞參數(shù)
class Dog:# 狗叫的方法def bark(self):print('旺')def eat(self, something):print('狗吃' + something)dog1 = Dog() dog1.bark() dog1.eat('骨頭')給方法加上返回值
class Dog:name = ''# 狗叫的方法def bark(self):print('旺')def eat(self, something):print('狗吃' + something)def setName(self, name):self.name = namedef getName(self):return self.namedog1 = Dog() dog1.bark() dog1.eat('骨頭') dog1.setName('旺財(cái)') print(dog1.getName())5.7 __init__
__init__是Python自帶的方法,需要至少一個(gè)參數(shù)self
__init__的作用是初始化,創(chuàng)建類的對(duì)象的時(shí)候,需要做的準(zhǔn)備工作
(連接網(wǎng)絡(luò)、打開文件、連接數(shù)據(jù)庫(kù))
當(dāng)類的對(duì)象被創(chuàng)建的時(shí)候,該方法就會(huì)被調(diào)用
class Dog:# 初始化def __init__(self, name, age):self.name = nameself.age = agedog1 = Dog('旺財(cái)', 8) print(dog1.name) print(dog1.age) dog2 = Dog('小花', 12) print(dog2.name) print(dog2.age)5.8 __del__
刪除對(duì)象的時(shí)候清理用的,調(diào)用者使用del關(guān)鍵字時(shí)候觸發(fā)
class Dog:# 初始化def __init__(self, name, age):self.name = nameself.age = age# 銷毀def __del__(self):print('__del__')self.name = ''self.age = 0dog1 = Dog('旺財(cái)', 8) print(dog1.name) print(dog1.age) del dog1 # 主動(dòng)觸發(fā) __del__ print('over') # 程序結(jié)束5.9 封裝
面向?qū)ο蟮娜筇卣?#xff1a;封裝、繼承、多態(tài)
屬性的公有和私有
Python中描述私有屬性和私有方法,通過(guò)前置下劃線來(lái)表示
1 _xxx:單前置下劃線
2 __xxx:雙前置下劃線
3 __xxx__:雙前置雙后置下劃線。類的內(nèi)部已經(jīng)定義好了
描述私有,一般使用雙前置下劃線
class Dog:# 初始化def __init__(self, name, age):self.__name = nameself.__age = agedef getName(self):return self.__name# 返回對(duì)象本身的描述字符串def __str__(self):return 'name:%s, age:%s' % (self.__name, self.__name)dog1 = Dog('旺財(cái)', 8) #print(dog1.__name) # 在外部不能直接訪問(wèn)__name屬性 print(dog1.getName()) print(dog1)5.10 繼承
子類繼承父類
| class 子類(父類): 子類的實(shí)現(xiàn)的代碼 |
父類的所有的非私有屬性和方法,子類中都會(huì)繼承,并可以直接使用
# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):passdog1 = Dog() dog1.eat()子類可以重寫父類的方法
# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):def eat(self):print('Dog eat')dog1 = Dog() dog1.eat()還可以在子類方法中調(diào)用父類的方法
# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):def eat(self):super().eat() # 調(diào)用父類的eat()方法print('Dog eat')dog1 = Dog() dog1.eat()子類還可以派生它的子類
# 子類的子類 class HabaDog(Dog):def eat(self):print('HabaDog eat')dog2 = HabaDog() dog2.eat()Python中的約定:
如果一個(gè)類沒(méi)有繼承任何類,將默認(rèn)繼承object類
如下兩種寫法效果相同
# 父類 class Animal:def eat(self):print('Animal eat') # 父類 class Animal(object):def eat(self):print('Animal eat')在Python3中,建議使用后者
5.11 多態(tài)
不同事物,對(duì)同一個(gè)操作所表現(xiàn)出來(lái)的多種形態(tài)
外科醫(yī)生、廚師、演員。Cut
動(dòng)手術(shù)、切菜、下班
Python的多態(tài)比較簡(jiǎn)單(與Java比起來(lái))
# 父類 class Animal(object):def eat(self):print('Animal eat')class Dog(Animal):def eat(self):print('Dog eat')class Man(Animal):def eat(self):print('Man eat')class Woman(Animal):def eat(self):print('Woman eat')# 函數(shù) def doEat(obj):obj.eat()dog1 = Dog() man1 = Man() woman1 = Woman() doEat(dog1) doEat(man1) doEat(woman1)doEat()函數(shù)中,理論上可以傳遞任意的參數(shù)。如果該參數(shù)的對(duì)象沒(méi)有eat()方法,怎么辦?
考慮使用 isinstance() 函數(shù)。判斷是否為某個(gè)類的對(duì)象
print(isinstance(dog1, Dog)) # True print(isinstance(dog1, Animal)) # True print(isinstance(a1, Animal)) # True print(isinstance(a1, Dog)) # False print(isinstance('hello', Animal)) # False可以在doEat()函數(shù)中,添加isinstance(),判斷輸入的obj是否為Animal的對(duì)象,只有是Animal對(duì)象時(shí),才能調(diào)用eat()方法
# 函數(shù) def doEat(obj): # obj只有為Aniaml類或子類對(duì)象才有eat方法 # isinstance判斷是否為某個(gè)類或子類的對(duì)象 # 參數(shù)1 obj 對(duì)象 # 參數(shù)2 type 類(類型) if isinstance(obj, Animal): obj.eat()?
總結(jié)
以上是生活随笔為你收集整理的Python—实训day3—简单的在线翻译程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 养成这8个好习惯 开车会很安全的
- 下一篇: HTML5的历史