获取必应网站翻译结果,注意中文翻译为英文与英文翻译为中文两种情况均需考虑。

网址:https://cn.bing.com/translator/ 一、分析网页

python 爬取post请求响应内容 python获取post结果_python 爬取post请求响应内容

这里建议先在空白的时候打开网页检查进network,然后直接输入一句话,这样右边加载出来的包少,便于寻找目标URL。

python 爬取post请求响应内容 python获取post结果_中文字符_02

python 爬取post请求响应内容 python获取post结果_python 爬取post请求响应内容_03

这是原文请求参数,所以data参数就可以按照这个格式构建。data:{‘fromLang’:‘auto-detect’,‘text’:原文,‘to’:‘zh-Hans’} ,大概就是这样了。这里的’fromLang’:'auto-detect’具体表示个啥我也不要清楚,可能表示一个句子的意思吧,试过汉译英英译汉这个都不变,所以直接让它这样就得了。

‘text’:原文,这个就不用说了,这是存原文的参数。

‘to’:‘zh-Hans’ 这个,表示译文是啥,zh-Hans表示简体中文,en表示英文,这里就只做汉译英英译汉了,其实别的语言有别的参数。

还有一点就是这个URL,它有翻译一个词一个词那种的,也有直接翻译一个句子的,我这里这个是直接翻译一个句子的,这么说吧,最好用直接翻译一个句子的,因为翻译句子的能翻译单个词的,翻译单个词的不一定能翻译一个句子,顶多就是在汉译英的时候首字母是大写的,别的毛病应该不大。

因为中英互译的时候控制译文的参数不一样,所以需要判断一下输入的是汉字还是单词,这里用这个

\u4e00 ~ \u9fff

这玩意是中文字符的编码范围。别的也没啥了。

二、代码

import requests
def start_tran():
    content = input('需要翻译的内容呀:\n')
    from_data = {}
    for i in content:
        if '\u4e00'<= i <= '\u9fff':
            print('您输入的是中文!!!')
            from_data = {'fromLang':'auto-detect','text':content,'to':'en'}
            break
        else:
            print('您输入的是英文!!!')
            from_data = {'fromLang':'auto-detect','text': content, 'to': 'zh-Hans'}
            break
    return from_data
def translate(from_data):
    url = 'https://cn.bing.com/ttranslatev3?isVertical=1&&IG=FFEB3453664B412382446351E8F72096&IID=translator.5028.63'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
    r = requests.post(url,data = from_data ,headers=headers)
    r.raise_for_status()
    #print(r.status_code)
    r.encoding = r.apparent_encoding
    data = r.json()  # 取出翻译结果
    detectedLanguage = data[0]
    translations = detectedLanguage['translations']
    result = translations[0]['text']
    print(result)
translate(start_tran())

还是JAVA的代码块好用(小声bb) 代码运行结果

需要翻译的内容呀:
我能送你回家吗,外面可能要下雨啦。
您输入的是中文!!!
Can I take you home? It may rain outside.

英译汉同样行得通。