小小翻譯器
一、關鍵技術
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, '')