python九行程式碼搞定百度翻譯
阿新 • • 發佈:2018-12-16
筆者最近在做一個前端的翻譯功能,用到了百度翻譯的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"]))