1. 程式人生 > >python九行程式碼搞定百度翻譯

python九行程式碼搞定百度翻譯

筆者最近在做一個前端的翻譯功能,用到了百度翻譯的api,不過每月都有200萬字的翻譯限制。所以就開始用python爬蟲來嘗試爬取一下百度的翻譯。    

先進入百度的翻譯頁面,網址 http://fanyi.baidu.com/translate。然後進入開發者模式(F12),切換成手機模式。因為PC端的web在post提交資料的時候會有2個我們不好獲取的引數(其中一個是token),但是手機版的沒有這2個引數,所以我們選擇手機版進行所需要的資料收集。

隨便輸入一些東西,然後查詢。可以發現開發者工具的network中,extendtrans和basetrans這兩個檔案都是翻譯的,然後樓主測試了一下發現extendtrans是擴充套件翻譯,主要是單詞和詞語的擴充套件翻譯(如果是一個句子的活,則可能沒有返回想要的內容)。而basetrans是基礎翻譯,句子也是可以翻譯的。所以樓主這裡就選擇了basetrans。然後檢視basetrans的headeres。

        request URL:請求的地址

  request method:請求的方式,一般常見的也就Post和Get

  user-agent:使用者代理,你會發現pc和手機請求的時候這個裡面的值是不一樣的。而且如果你不設定的話,裡面會有一個python的預設值。這個值可能會影響網站給你返回的資料。

  form data:就是我們提交的表單資料了。而引數的zh表示中文,en表示英文。(下面是百度翻譯提供的語種)

語言簡寫 名稱
auto 自動檢測
zh 中文
en 英語
yue 粵語
wyw 文言文
jp 日語
kor 韓語
fra 法語
spa 西班牙語
th 泰語
ara 阿拉伯語
ru 俄語
pt 葡萄牙語
de 德語
it 義大利語
el 希臘語
nl 荷蘭語
pl 波蘭語
bul 保加利亞語
est 愛沙尼亞語
dan 丹麥語
fin 芬蘭語
cs 捷克語
rom 羅馬尼亞語
slo 斯洛維尼亞語
swe 瑞典語
hu 匈牙利語
cht 繁體中文
vie 越南語

然後進入basetrans的preview裡檢視百度翻譯返回的json資料,可以發現我們需要的翻譯在trans->0->dst裡面,所以就有了以下的python程式碼。嗯,一共九行程式碼,搞定了百度翻譯。

import requests
import json
search = input("請輸入你要翻譯的內容:")
url = "https://fanyi.baidu.com/basetrans"
headers={"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"}
posData={"query":search,"from":"zh","to":"en"}
response = requests.post(url=url,data=posData,headers=headers)
json_data=json.loads(response.content.decode())
print("輸入:{0} 翻譯:{1}".format(search,json_data["trans"][0]["dst"]))