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, '')

運行效果圖

效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章