手把手教你如何用python制作自动翻译程序

思路:“输入文本”  →  “翻译”  →  “得到译文”

Ps:这个思路好像有点那啥哈哈哈哈(是个正常人都知道的思路)

好的,现在让我们直接进入主题:

                                                       

        第一步的  “输入文本”  谁都会了,直接跳过 (扣扣键盘的事)。

        进入第二步(重点来了):要实现  “翻译”  这一步其实有很多种方式可以实现,今天我们就使用python的  requests库  来帮我们实现(爬百度的翻译网站百度翻译-200种语言互译、沟通全世界!)。 

使用 requests库 首先就要安装,还有一个 execjs库 也要安装

pip install resquests
pip install execjs

Ps:如果是使用其他Python IDE的话,好像就直接自带了requests库(我自己就用的PyCharm)

①. 现在我们就要正式开始撸代码了,首先调用两个需要到的第三方库

import requests  # requests库 进行网络请求
import execjs  # execjs库 用来执行js语句

②. 设置 请求头

headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': '这里填写自己的cookie',
    'Host': 'fanyi.baidu.com',
    'Origin': 'https://fanyi.baidu.com',
    'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang'
               '=auto2zh',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/93.0.4577.82 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}

③. 因为百度翻译反爬机制,经过观察只加密了sign数据,由代码计算,将js文件保存在根目录下(想看js文件的私信我哦)

info = input('Please enter the text to translate:')
with open('sign.js') as f:
    jsData = f.read()
sign = execjs.compile(jsData).call('e', info)  # 打开js文件用execjs库处理并计算出sign

④. 设置  data参数

data = {
    'from': 'zh',
    'to': 'en',
    'query': info,  # info 是变量存储输入的字符串
    'transtype': 'realtime',
    'simple_means_flag': '3',
    'sign': sign,  # sign 是解密后的标签变量
    'token': '2d870ff8c7b08691879fdb3058988f46',
    'domain': 'common'
}

⑤. 获取 cookies 

render_url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
cookiejar = requests.get(render_url, headers=headers).cookies
cookies = requests.utils.dict_from_cookiejar(cookiejar)

⑥. 发送 post请求,返回的是经过‘utf-8’编码后的字符串,我们要对其进行解码,并且转化为字典,直接对数据进行类型转换会报错“NameError: name 'null' is not defined”

报错原因:Python不能处理null这样的字符串

解决办法:把null当成变量,提前定义:null=''

global null
null = ''
result = requests.post(render_url, headers=headers, data=data, cookies=cookies)
text = eval(result.text.encode('utf-8').decode('utf-8'))  # 需要null

        第三步:在数据(字典)中将我们要的结果提取出来

print('Translation results: ' + text['trans_result']['data'][0]['dst'] + '\n')

 本篇分享到这里也快就要结束了,首先谢谢各位看官的观看(不凡点个免费的赞再走吧哈哈哈)最后将代码全部总结起来,看起来也比较有思路。

import requests
import execjs

headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': '这里输入自己的cookie',
    'Host': 'fanyi.baidu.com',
    'Origin': 'https://fanyi.baidu.com',
    'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang'
               '=auto2zh',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/93.0.4577.82 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}
global null
null = ''

while True:
    info = input('Please enter the text to translate:')
    with open('sign.js') as f:
        jsData = f.read()
    sign = execjs.compile(jsData).call('e', info)

    data = {
        'from': 'zh',
        'to': 'en',
        'query': info,
        'transtype': 'realtime',
        'simple_means_flag': '3',
        'sign': sign,
        'token': '2d870ff8c7b08691879fdb3058988f46',
        'domain': 'common'
    }
    render_url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
    cookiejar = requests.get(render_url, headers=headers).cookies
    cookies = requests.utils.dict_from_cookiejar(cookiejar)

    result = requests.post(render_url, headers=headers, data=data, cookies=cookies)
    text = eval(result.text.encode('utf-8').decode('utf-8'))
    print('Translation results: ' + text['trans_result']['data'][0]['dst'] + '\n')
    print('---------------------------------')
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值