背景
這個功能是在工作時,上級有個需求是讓我將json文件中指定字段的英文翻譯成中文,并且指定要使用谷歌翻譯,理由是翻譯的結果可能會比較準確。
過程
因為之前寫過用python實現有道翻譯,是在ajax中找到它的翻譯接口的,所以我以為谷歌應該也差不多,于是我就打開 “開發者工具”,拼命地尋找它的翻譯接口,果然讓我發現了,哈哈哈哈~~
然而我發現我高興地太早了,這TMD是個啥東西,為啥不是json啊,崩潰!!!
算了,你牛,我放棄~
于是我就面向度娘,尋求幫助,搜索關鍵詞 “python實現谷歌翻譯”,哦吼~ 結果還挺多
哈哈又草率了(欲哭無淚),隨緣選中一個后,大致看了一下(好復雜555~),它們的思路大致是用PyExecJS庫模擬js代碼獲取結果,我才不管這些,能用就行,然后一頓ctrl c/ctrl v 代碼到本地后,修改一些數據,開始運行。
接下來就一頓報錯,我就一頓臥槽。好的,沒安裝庫…安裝不成功,和一些莫名的其他原因。這能忍?于是我決定自己動手,豐衣足食,大不了就爬網頁嘛,然后打開網頁源代碼,MD又草率了,并沒有需要的內容,忘記結果是用js生成的,唉,怎么辦?只好從最開始的那個ajax的接口下手了
內容里有很多重復的內容并且感覺毫無規則…我硬著頭皮嘗試用正則把內容提取出來,代碼我就不貼,因為…
我花了好長好長時間,瘋狂改正則表達式…啊哈!的確可以得出結果,超開心的~ 但是后面翻譯的過程發現,這只適合翻譯一句話,多一點都不行,它會漏掉…頭又炸了!!!
我又放棄了,已經束手無策了…第二天,看到一篇文章,里面寫的是 “ 字符串轉為列表”的知識點,然后我靈光一現,想到了用正則和列表相結合,將內容提取出來,于是我看到了奧特曼(光)哈哈哈,這次真的可以!!!!不說了上代碼
代碼
import requests
import json
import re
import timedef googleTranslate(text):"""用谷歌翻譯內容,返回翻譯結果params: text 翻譯的內容return: str s 翻譯結果"""url = 'https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&f.sid=-2984828793698248690&bl=boq_translate-webserver_20201221.17_p0&hl=zh-CN&soc-app=1&soc-platform=1&soc-device=1&_reqid=5445720&rt=c'headers = {'origin': 'https://translate.google.cn','referer': 'https://translate.google.cn/','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36','x-client-data': 'CIW2yQEIpbbJAQjEtskBCKmdygEIrMfKAQj2x8oBCPfHygEItMvKAQihz8oBCNzVygEIi5nLAQjBnMsB','Decoded':'message ClientVariations {repeated int32 variation_id = [3300101, 3300133, 3300164, 3313321, 3318700, 3318774, 3318775, 3319220, 3319713, 3320540, 3329163, 3329601];}','x-same-domain': '1'} # 以防萬一,我全加上了,可能有些不寫也可以 data = {'f.req': f'[[["MkEWBc","[[\\"{text}\\",\\"auto\\",\\"zh-CN\\",true],[null]]",null,"generic"]]]'} # text則是你要翻譯的內容res = requests.post(url, headers=headers, data=data).text # 獲取返回的結果pattern = '\)\]\}\'\s*\d{3,4}\s*\[(.*)\s*' # 提取需要的部分part1 = re.findall(pattern, res)part1_list = json.loads(part1[0]) # 字符串轉列表if part1_list[2] is None: # 如果返回的結果中沒有需要的數據,則返回輸入的內容print(text)return textcontent1 = part1_list[2].replace('\n', '')part2_list = json.loads(content1)[1][0][0][5:][0] # 過濾結果中重復的部分s = ''for i in part2_list: # 遍歷結果中的每一句話,并進行拼接s += i[0] print(s)return s
text = 'friend. Let us look back on 2020 and look forward to 2021.'
print(text)
googleTranslate(text)
效果
效果如何?
如何翻譯成其他語言?
當然,這僅僅是實現了任何語言轉為中文,要轉為別的語言,你可以通過執行js,獲取所有語言對應的英文字母,以字典的形式存儲,最后保存為json文件
然后執行程序時,動態地輸入翻譯后的語言,去json文件中獲取對應的英文代表,然后替換data中的"zh-CN"即可。比如我想翻譯成日語,我就將“zh-CN”替換成 “ja”,這樣,翻譯出來的結果就是日語了
修改data數據
翻譯結果
好了,今天的分享就到這了,奧里給~
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數據類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)
牛逼!Python函數和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結
以上是生活随笔為你收集整理的实战:Python 轻松实现自动化谷歌翻译!的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。