今天劃劃水
- 從零開始的爬蟲生活
- 夢回s4
- 明確思路
- 開始行動
- 成果
- 點進來看一看(勾引)
從零開始的爬蟲生活
標題為什么要這么寫呢,因為我發現啊,有很多跟著一起學習的小伙伴,對于基礎并不是掌握的很牢固,或者說很充實,所以小澤準備講的慢一點,在講爬蟲的同時,把基礎也給好好地講一講!
對了,400贊更新下一期哦!!!400贊400贊,大家一起努力鴨
(`?ω?′)
夢回s4
今天,就讓我們一起重新完善一下,昔日我們寫下的,翻譯器!

這里跟大家說一個需要注意的點,如果我們要在原本可以運行的代碼上做出修改或者添加功能,最好最好最好是重新建立一個py檔案,然后粘貼復制,這是一個好習慣,我有,希望大家也有( ̄▽ ̄)~*!
這里小澤呢,就先新建一個py檔案:

然后找到我們當初寫的代碼,如果沒找到的話,沒關系,這里給你直接拷貝過來:
# 參考requests模塊和json模塊,為了解碼
import requests
import json
# 指定我們剛才辛辛苦苦找到的url
url = 'http://fy.iciba.com/ajax.php?a=fy'
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
word = input('請輸入要翻譯的英語:')
date = {
'f': 'zh',
't': 'en',
'w': word
}
# .content是轉成二進制的意思 .decode()是指定編譯格式,默認編碼為字串編碼
response = requests.post(url=url,data=date,headers=header).content.decode()
# 用json模塊的loads實作把爬下來的資料轉換成我們能看懂的資料
# 這里大家可以列印一下response看一看資料就知道了~要多實踐哦
a = json.loads(response)['content']
b = a['word_mean']
print('---------------------------------------------')
for i in b:
print(i)
print('---------------------------------------------')
print('翻譯完成!')
今天,我們就要把它給完善嘍!
那么首先,我們要先有一個思維流程對吧,做什么事都要先想一想大致的流程,這里再教大家一個比較實用的技巧:

新建一個file檔案,這個檔案有什么好處呢?
總之就是…格調瞬間就高了起來(`?ω?′),比如:

是不是要比寫一堆注釋來的好看,而且思路也會更明確!
明確思路
既然說了半天思路要明確,那么大家都明確思路了嗎?
很顯然,沒有!
好吧~╮(╯﹏╰)╭
這里只能小澤帶著大家一起捋一捋思路了:
首先我們上次完成的是一個翻譯功能,但是一個翻譯器肯定不是光有翻譯功能對吧,就像我們上廁所,不光要有排尿系統,還要有那個東西對吧,還要有洞洞,不然的話你也出不來,所以有的時候啊,不能光看內在,也要適當的看一看外在!!!o(* ̄3 ̄)o
那我們就試著把上一次寫的翻譯功能真正的變成一個 動態的功能吧 動態的功能吧 動態的功能吧 !
開始行動
怎么寫功能呢?def啊,怎么寫def呢?def 函式名():啊,怎么寫def 函式名():呢?……
# def 方法名():
def fun():
# pass意為跳過,就像你遇到不會做的題跳過一樣
# 程式見到pass就去找下一個命令了
pass
然后我們再把第4天的翻譯功能寫到功能里,就起個比較洋氣的名字吧:
# 參考requests模塊和json模塊,為了解碼
import requests
import json
# def 函式名():
def fanyi():
# 指定我們剛才辛辛苦苦找到的url
url = 'http://fy.iciba.com/ajax.php?a=fy'
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
word = input('請輸入要翻譯的英語:')
date = {
'f': 'zh',
't': 'en',
'w': word
}
# .content是轉成二進制的意思 .decode()是指定編譯格式,默認編碼為字串編碼
response = requests.post(url=url,data=date,headers=header).content.decode()
# 用json模塊的loads實作把爬下來的資料轉換成我們能看懂的資料
# 這里大家可以列印一下response看一看資料就知道了~要多實踐哦
a = json.loads(response)['content']
b = a['word_mean']
print('---------------------------------------------')
for i in b:
print(i)
print('---------------------------------------------')
print('翻譯完成!')
不難看出來,其實就是開頭寫了個def fanyi(): 然后把下面的所有內容都往右縮進了一個表格,也許你要問什么是表格了,吶吶吶,直接教你好了,選中下面所有內容,然后按一下TAB,就是Q旁邊的那個按鍵,嘩的一下,就縮過去了(<ゝω?)☆
但是,總所周知,一個好的方法絕對不是死的,我們需要添加一些引數,觀察一下,哪些資料是可以變成動態的!
就比如有很多小伙伴問過的,怎么用中文翻譯英文,或者一些其他語言,兩種語言的選擇,加到引數里!!!

這樣子就實作了我們動態改變翻譯語種的目標!

為什么這么說呢,比如說啊,我們呼叫一下函式:

可以看到,我們選擇的翻譯語種是英譯漢,en代表的英語,zh代表的漢語,但是大家還記得auto嗎?
就是自動翻譯的時候兩個值都會是auto:

那么我們可不可以兩個都填auto呢?
當然不可以啦!!!
你要這樣想,服務器能識別你要翻譯的句子,但是它不能猜到你想要翻譯成什么鴨,對吧!
所以auto只能存在一個,那么我們就把en換成auto試試:

試一試,比如我們輸入一句日語!
いいね

可以看到這里還是請輸入要翻譯的英語,不太合適,讓我們改一下吧!

然后運行,輸入剛才那句日語いいね,揍你:

好家伙,直接給我們報錯了,很快啊!

意思就是沒有這個索引值嘍,那我們把字典全部列印出來看一看,到底是什么東西!

注釋掉列印出來的那些東西,只看a,a就是我們爬下來的字典哦!

原來問題就出在這里!如果用日語進行翻譯,輸出的索引值就會變成out,而不是我們之前用的word_mean,
那么我們再試一下英語:

英語翻譯成中文,是word_mean,我們再試一下別的語言:

可以看到,我們輸入了一句西班牙語哈:

但是自動識別給我們識別成了en,也就是英語,說明這個自動識別也不怎么可靠嘛~
所以我們還是進行手動的錄入語種,比如西班牙語就是:


當然這里我們不管那么多,先只實作英譯漢,和漢譯英!
目標明確,也就是說我們要先寫一個判斷:判斷用戶是要漢譯英,還是英譯漢,
怎么寫呢,不會寫嗎,好吧,讓你抄作業好了(?′?`?)
if __name__ == '__main__':
# 用于輸入需求
how = input('英譯漢/漢譯英(0/1):')
if how == '0':
fanyi('en','zh')
elif how == '1':
fanyi('zh','en')
else:
print('請輸入正確的數字!')
如果想再人性化一些,比如加個是否需要繼續翻譯,要怎么做呢?
第一步:死回圈!
if __name__ == '__main__':
while True:
# 用于輸入需求
how = input('英譯漢/漢譯英(0/1):')
if how == '0':
fanyi('en','zh')
elif how == '1':
fanyi('zh','en')
else:
print('請輸入正確的數字!')
死回圈有了,現在的效果就是我們翻譯完了一個,就會又讓我們繼續翻譯,所以我們要設定一個退出的選項:break,
(〃‘▽’〃)
if __name__ == '__main__':
while True:
# 用于輸入需求
how = input('英譯漢/漢譯英(0/1):')
if how == '0':
fanyi('en','zh')
ranhou = input('是否繼續翻譯?(0/1):')
if ranhou == '1':
break
elif how == '1':
fanyi('zh','en')
ranhou = input('是否繼續翻譯?(0/1):')
if ranhou == '1':
break
else:
print('請輸入正確的數字!')
然后我們就會發現,如果繼續翻譯了,就會又回到最初始的界面,這很笨,不好,

那么我們該怎么辦呢?弄復雜一點唄,多判斷一下唄,
 ̄へ ̄
程式員,就是受苦受累的!我們要悄悄地掉頭發,然后在人群中閃瞎所有人!
import sys
if __name__ == '__main__':
while True:
# 用于輸入需求
how = input('英譯漢/漢譯英(0/1):')
print('*'*50)
if how == '0':
fanyi('en','zh')
print('*' * 50)
while True:
ranhou = input('繼續當前翻譯/回到主界面/退出(0/1/2):')
print('*' * 50)
if ranhou == '0':
fanyi('en','zh')
print('*' * 50)
elif ranhou == '1':
break
else:
sys.exit()
elif how == '1':
fanyi('zh','en')
print('*' * 50)
while True:
ranhou = input('繼續當前翻譯/回到主界面/退出(0/1/2):')
print('*' * 50)
if ranhou == '0':
fanyi('zh', 'en')
print('*' * 50)
elif ranhou == '1':
break
else:
sys.exit()
else:
print('請輸入正確的數字!')
當然,也可以加點花樣,讓界面更好看一點,做一個講究的程式員!
由于上述代碼都是基礎類的,所以就不一一注釋了,如果需要解答可以留言哦!

效果棒棒噠!
(`?ω?′)
那么剩下要解決的一個問題就是怎么把:

這個煩人的東西給簡化嘍!
眾所周知,這兩種輸出不是out就是world_mean,大不了就出錯唄,兩個都要!
也省的想那么多,hhh
這里就要用到我們的try和except組合啦,來,讓我們 解 除 封 印 !

跑到我們的翻譯方法函式里面去,把try和except先寫上嘍!
直接把我們原本用的復制到try里面,再把另外一種寫到except里面,很簡單吧很簡單吧很簡單吧,如果哪里不懂的話,一定一定要問,不要迷迷糊糊就過去了,打好基礎才能做好后面的一切,基礎真的真的很重要!!

成果
這里我們在外面已經做了界面的一些修飾,所以把兩條橫線去掉,大功告成!來試一下吧:

成功達到了一個…比之前要好的效果!
當然最后的歡迎使用是判斷退出的時候加上的,應該是謝謝使用哈~
點進來看一看(勾引)
可能有些小伙伴要說了,你明明在劃水,演都不帶演的!
真的是冤枉啊!!!
是有很多很多小伙伴私信或者加了群跟小澤說這類的問題,所以小澤才想做一期詳細講解的,也方便有一些基礎不是很牢固的小伙伴聽講對叭!!
(`?ω?′)
你問群?

從之前的3個人,已經壯大到現在的25個人啦,在這里你想問的問題都可以問,說不定還可以參與到一些實踐的專案里,只要你有一顆學徒的心,就能加進來!
沒廣告,沒賣課,沒收費資源!有的只是一群單身漢而已!!真的!!!
當然還有的小伙伴說對異步這一塊不是很了解,所以下一期就準備做異步的更詳細講解,還有更多案例哦!!
如果想看的話,就快點贊吧~
唉…求求你們不要光關注不點贊了,小澤還是比較喜歡點贊,hhh
老規矩,400贊更下一期!
200多粉絲呢,不會達不到吧,不會把不會吧~
(`?ω?′)
如果喜歡的話,點個贊最好點個關注加個群啥的,大家一起學習交流,如果覺得對你有幫助了,那就太好了!



各位兄弟姐妹早點睡覺,來日再見,溜了,
(`?ω?′)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/231031.html
標籤:其他
上一篇:肥豬的鋼琴床(dp好題)
