調(diào)用谷歌翻譯API

在平時使用谷歌翻譯的過程中,經(jīng)常會遇到需要批量翻譯大量文本的情景左权,這種時候需要調(diào)用谷歌翻譯的API

首先可以使用python庫googletrans

pip install googletrans
#使用方法
from googletrans import Translator
translator = Translator(service_urls=['translate.google.cn'])
source = '我還是不開心!'
text = translator.translate(source,src='zh-cn',dest='en').text
print(text)

"i'm still not happy!"

但是在面對大規(guī)模需要翻譯的句子時就會很慢鞍爱,所以可以使用協(xié)程的方法涕蜂。
這里我們使用了基于gevents庫的grequests庫析校。
仔細(xì)看了下googletrans庫的核心代碼礁哄,發(fā)現(xiàn)主要是構(gòu)造一個url长酗,然后發(fā)起get請求,得到一個json的結(jié)果桐绒,從中提取出翻譯結(jié)果夺脾。
構(gòu)造url的過程需要一個token,根據(jù)某些規(guī)則生成茉继,所以為了方便還是調(diào)用googletrans的部分函數(shù)咧叭。

具體的參考代碼如下:
這里是將德語(de)翻譯成英語(en),代碼中需要相應(yīng)修改烁竭。

import grequests
import logging
import json
from googletrans import Translator
from googletrans.utils import format_json

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
translator = Translator(service_urls=['translate.google.cn'])

logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s',filename='log.txt')
logger = logging.getLogger()


def exception_handler(request, exception):
    logger.warning('exception when at %s :%s',request.url,exception)


def work(urls):
    reqs = (grequests.get(u,verify=True, allow_redirects=True, timeout=4) for u in urls)
    res = grequests.map(reqs, exception_handler=exception_handler,size=20)
    return res

def totaltranslate():
    file2 = open('de2en_en.txt',mode='a',encoding='utf-8')

    with open('de.txt',mode='r',encoding='utf-8') as f:
        urls = []
        num = 0
        for line in f:
            num+=1

            line = line.strip()
            token = translator.token_acquirer.do(line)
            url="https://translate.google.cn/translate_a/single?client=t&sl=de&tl=en&hl=en&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=1&ssel=3&tsel=0&kc=1&tk={0}&q={1}".format(token,line)
            urls.append(url)

            if len(urls) >= 50:
                res = work(urls)
                for r in res:
                    if hasattr(r,'status_code'):
                        if r.status_code == 200:
                            try:
                                a=format_json(r.text)
                                target = ''.join([d[0] if d[0] else '' for d in a[0]])
                                source = ''.join([d[1] if d[1] else '' for d in a[0]])
                            except Exception as e:
                                logger.error('when format:%s',e)
                                logger.error('%s\n%s',r.text)
                                source = ''
                                target = ''
                            if len(source) != 0 and len(target) != 0:
                                file2.write(target+'\n')
                            else:
                                file2.write('\n')
                        else:
                                file2.write('\n')
                urls = []
                logger.info('finish 50 sentence, now at %s',num)
    file2.close()

def sentencetranslate(line):
    line = line.strip()
    text = translator.translate(line,src='de',dest='en').text
    return text

def completetranslate():
    file1 = open('de2en_en.txt',mode='r',encoding='utf-8')
    file2 = open('new_de2en_en.txt',mode='a',encoding='utf-8')
    i = 1
    with open('de.txt',mode='r',encoding='utf-8') as f:
        for line in f:
            t = file1.readline()
            if len(t) == 1:#'only \n'
                text = sentencetranslate(line)
                file2.write(text+'\n')
            else:
                file2.write(t)
            i += 1
            if i%100 == 0:
                print(i)
    file1.close()
    file2.close()


if __name__ == "__main__":
    totaltranslate()
    completetranslate()

totaltranslate()以及翻譯了大部分的句子菲茬,但是可能因?yàn)槟承┰蛴幸恍┚渥記]有翻譯,所以還需要completetranslate()來補(bǔ)全翻譯結(jié)果派撕。

在grequests.map()中size設(shè)置為20的情況下婉弹,平均每秒翻譯20句。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腥刹,一起剝皮案震驚了整個濱河市马胧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衔峰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垫卤,居然都是意外死亡威彰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門穴肘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歇盼,“玉大人,你說我怎么就攤上這事评抚”海” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵慨代,是天一觀的道長邢笙。 經(jīng)常有香客問我,道長侍匙,這世上最難降的妖魔是什么氮惯? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮想暗,結(jié)果婚禮上妇汗,老公的妹妹穿的比我還像新娘。我一直安慰自己说莫,他們只是感情好杨箭,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著储狭,像睡著了一般告唆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晶密,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天擒悬,我揣著相機(jī)與錄音,去河邊找鬼稻艰。 笑死懂牧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尊勿。 我是一名探鬼主播僧凤,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼元扔!你這毒婦竟也來了躯保?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤澎语,失蹤者是張志新(化名)和其女友劉穎途事,沒想到半個月后验懊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尸变,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年义图,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片召烂。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡碱工,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奏夫,到底是詐尸還是另有隱情怕篷,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布酗昼,位于F島的核電站廊谓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仔雷。R本人自食惡果不足惜蹂析,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碟婆。 院中可真熱鬧电抚,春花似錦、人聲如沸竖共。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽公给。三九已至借帘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淌铐,已是汗流浹背肺然。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腿准,地道東北人际起。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像吐葱,于是被迫代替她去往敵國和親街望。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 廢話少說 從速賣通抓取了一些評論想進(jìn)行一些簡單的文本分析弟跑,但是因?yàn)樗儋u通是一個跨境電商平臺灾前,上邊的評論基本都是小語...
    想酷卻酷不起來閱讀 30,166評論 8 23
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)孟辑,斷路器哎甲,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,332評論 25 707
  • 欲 是蛇 吐信 蜿蜒探索 遇洞則入 外力不可拔 性執(zhí)著 欲 是蘋果 紅潤 甘甜解渴 入口即化 內(nèi)心不可擋 喜琢磨 ...
    陳言著詩隨云飛閱讀 269評論 0 1
  • 好不容易度過了極其忙碌的12月烧给,清醒過來后才發(fā)現(xiàn)燕偶,原來2016已經(jīng)過去了喝噪、础嫡、、前段時間不分白天黑夜的忙碌酝惧,到這兩天...
    紅綠乘藍(lán)閱讀 386評論 0 0