03 调用百度API应用——小小翻译器

一、关键技术

urllib库

1、获取网页信息

# urllib_test01.py
from urllib import request

response = request.urlopen('http://fanyi.baidu.com')
html = response.read()
html = html.decode('utf-8')
print(html)

输出

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>百度翻译</title>
......
req = request.Request('http://fanyi.baidu.com')
response = request.urlopen(req)
html = response.read()
html = html.decode('utf-8')
print(html)

输出

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>百度翻译</title>
......
from urllib import  request
request.urlretrieve('http://www.zzti.edu.cn/_mediafile/index/2017/06/24/1qjdyc7vq5.jpg', 'aaa.jpg')

(‘aaa.jpg’, <http.client.HTTPMessage at 0x1ed5027b4e0>)

2、获取服务器响应信息

from urllib import request
f =request.urlopen('http://fanyi.baidu.com')
data = f.read()
print('Status:', f.status, f.reason)
Status: 200 OK

for k, v in f.getheaders():      # 可以看到httpt响应的头信息!
    print('%s: %s' % (k, v))


Content-Type: text/html; charset=UTF-8
Date: Mon, 09 Mar 2020 16:30:55 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: yunjiasu
Set-Cookie: BAIDUID=34C7B763CCA69620426A85481F921491:FG=1; expires=Tue, 09-Mar-21 16:30:55 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Tracecode: 18552317720693475338031000
Vary: Accept-Encoding
Yjs-Id: 8b56b17794f42b01-110
Connection: close
Transfer-Encoding: chunked

#-*- coding: UTF-8 -*-

from urllib import request

req = request.Request('http://fanyi.baidu.com')
response = request.urlopen(req)
print('geturl打印信息:%s' % (response.geturl()))
print('****************************************')
print('info打印信息:%s' % (response.info()))
print('****************************************')
print('getcode打印信息:%s' % (response.getcode())) # 返回http状态码!!

geturl打印信息:https://fanyi.baidu.com/


info打印信息:Content-Type: text/html; charset=UTF-8
Date: Mon, 09 Mar 2020 16:34:33 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: yunjiasu
Set-Cookie: BAIDUID=2820773CAD07EC780597BA58D2C2BDFB:FG=1; expires=Tue, 09-Mar-21 16:34:33 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Tracecode: 20735918130605589514031000
Vary: Accept-Encoding
Yjs-Id: 8b56b9febd532afd-110
Connection: close
Transfer-Encoding: chunked


getcode打印信息:200

3、向服务器发送数据

注意:get & post

4、使用 User Agent 隐藏身份

方法一
#-*- coding: UTF-8 -*-
from urllib import request
url = 'http://www.csdn.net/'
head = {}
head['User-Agent'] = """Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"""
req = request.Request(url, headers=head)
response = request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
......
方法二
#-*- coding: UTF-8 -*-
from urllib import request
url = 'http://www.csdn.net/'
req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19')
response = request.urlopen(req)
html = response.read().decode('utf-8')
print(html)
......

二、源码

1、设计界面

主函数!!!注意布局方法!

from tkinter import *

root = Tk()
root.title('单词翻译器')
root['width'] = 250
root['height'] = 130

Label(root, text = '输入要翻译的内容:', width = 15).place(x = 1, y = 1) # 绝对坐标

Entry1 = Entry(root, width = 20)
Entry1.place(x = 110, y = 1)

Label(root, text = '翻译的结果:', width = 18).place(x=1, y=20) # 绝对坐标(1,20)
s = StringVar()
s.set('大家好,这是测试')

Entry2 = Entry(root, width=20, textvariable = s)
Entry2.place(x = 110, y = 20) # 输入错误,自己都知道改为y = 20才对。。。。。。

Button1 = Button(root, text = '翻译', width = 8)
Button1.place(x = 40, y = 80)
Button2 = Button(root, text = '清空', width = 8)
Button2.place(x = 110, y = 80)

# global former
# former = ''

Button1.bind('<Button-1>', leftClick)
Button2.bind('<Button-1>', leftClick2) # 调用两个 leftClick 事件(下面的函数将定义)!!!

root.mainloop()

我们是谁啊
{‘from’: ‘zh’, ‘to’: ‘en’, ‘trans_result’: [{‘src’: ‘我们是谁啊’, ‘dst’: ‘Who are we’}]}
翻译的结果是:Who are we

2、使用百度翻译开放平台API

import hashlib
m = '2015063000000001apple143566028812345678'
m_MD5 = hashlib.md5(m.encode("utf-8"))
sign = m_MD5.hexdigest()
print('m = ', m)
print('sign = ', sign)

m = 2015063000000001apple143566028812345678
sign = f89f9594663708c1605f3d736d01d2d4

#-*- coding:UTF-8 -*-
from tkinter import *
from urllib import request
from urllib import parse
import json
import hashlib

def translate_Word(en_str):
    # simulation browse load host url, get cookie
    URL = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
    Form_Data = {}
    Form_Data['from'] = 'zh'
    Form_Data['to'] = 'en'
    Form_Data['q'] = en_str
    Form_Data['appid'] = '20200309000395526'
    Form_Data['salt'] = '1435660288'
    Key = '_FLq13OX5RsJUzVttVMI'
    m = Form_Data['appid'] + en_str + Form_Data['salt'] +Key
    m_MD5 = hashlib.md5(m.encode('utf-8'))
    Form_Data['sign'] = m_MD5.hexdigest()
    
    data = parse.urlencode(Form_Data).encode('utf-8')
    response = request.urlopen(URL, data)
    html = response.read().decode('utf-8')
    translate_results = json.loads(html)
    print(translate_results)
    translate_results = translate_results['trans_result'][0]['dst']
#     origin = translate_results['trans_result'][0]['src']
    
    print('翻译的结果是:%s' % translate_results)
    return translate_results

def leftClick(event):
    en_str = Entry1.get()
    print(en_str)
    vText = translate_Word(en_str)
    s.set(" ")
    Entry2 = Entry(root, width=20, textvariable = s)
    Entry2.place(x = 110, y = 20) # 输入错误,自己都知道改为y = 20才对。。。。。。
    Entry2.config(Entry2, text = vText)
    Entry2.insert(0, vText)

def leftClick2(event):
    s.set(' ')
    Entry2 = Entry(root, width=20, textvariable = s)
    Entry2.place(x = 110, y = 20) # 输入错误,自己都知道改为y = 20才对。。。。。。
    s.set(' ')
    #     s.set("")
#     Entry2.insert(0, '')

运行效果图

效果图

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值