使用网络爬虫编写一款翻译程序

使用网络爬虫编写一款翻译程序,最后通过pyinstaller打包为可执行exe程序

进入翻译网站网页开发者模式,在headers中找到from_data数据。获取URL,headers和User-Agent(用户代理),用来伪装浏览器访问。由于from_data数据是json类型的,所以在程序里的from_data数据也应改为json类型。用requests库发送POST请求,并将翻译结果返回给用户。

程序运行效果:

  1. 相关理论
    1. 爬虫技术

爬虫:请求网站并提取数据的自动化程序。

爬虫原理:

  1. 向服务器发起请求:

通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器的响应。

  1. 获取响应内容:

如果服务器正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML、JSON、二进制文件(如图片、视频等类型)。

  1. 解析内容:

得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是JSON,可以直接转成JOSN对象进行解析,可能是二进制数据,可以保存或者进一步处理 。

  1. 保存内容:

保存形式多样,可以保存成文本,也可以保存至数据库,或者保存成特定格式的文件。

    1. Requests

浏览器发送消息给网址所在的服务器,这个过程就叫做HTPP Request。主要有:GET/POST两种类型函数,另外还有HEAD/PUT/DELETE/OPTIONS。GET和POST的区别就是:请求的数据GET是在url中,POST则是存放在头部。

本实验用到的是Request 库中的POST函数,它向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源或二者皆有。

https://i-blog.csdnimg.cn/blog_migrate/57209763b1a6907797a8fbd6e91e9a29.png

    1. Tkinter库介绍

Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

Tkinter包含了若干模块。Tk接口被封装在一个名为 _tkinter 二进制模块里( tkinter 的早期版本)。 这个模块包含了Tk的低级接口。因而它不会被程序员直接应用。它通常表现为一个共享库(或DLL文件),但在一些版本中它与Python解释器结合在一起。

在Tk接口的附加模块中,Tkinter包含了一些Python模块,保存在标准库的一个子目录里。称为 tkinter。 其中有两个重要的模块。一个是Tkinter自己,另一个叫做Tkconstants:前者自动导入后者,所以你如果使用Tkinter,仅仅导入一个模块就可以。

本实验在Tk库用到的函数有:

Place函数(以坐标为准的布局方案;和它用法相  同的函数还有grid和pack)

Title函数(返回"标题化"的字符串)

Geometry函数(获取几何对象的中心点)

Label函数()折叠

Text函数 ()

Button函数 (展现不同样式的按钮)

 

代码如下:

import requests
import tkinter as tk

root = tk.Tk()
root.title('python自制翻译软件')
root.geometry('400x200')
l1 = tk.Label(root,text='请输入翻译内容:',fg="red",font=("楷体", 20))
l1.place(x=200, y=0, anchor='n')
t1 = tk.Text(root,width=56,height=5)
t1.place(x=200, y=30, anchor='n')

def translate():
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    data = {
        'i': t1.get(0.0,'end'),
        'from':'zh',
        'to':'en',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom':'fanyi.web',
        'action': 'FY_BY_CLICKBUTTION'
    }
    response = requests.post(url,data=data).json()
    r = response['translateResult'][0][0]['tgt']
    t1.delete(0.0,'end')
    t1.insert('end',r)
b1 = tk.Button(root,text='中英互译',width=8,font=("楷体"),command=translate)
b1.place(x=100, y=105, anchor='n')

def translate():
        url = 'http://fy.iciba.com/ajax.php?a=fy'
        headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
            }
        data = {
                'f': 'zh-CN',
                't': 'ja',
                'w': t1.get(0.0,'end')
                }
        response = requests.post(url, data=data, headers = headers).json()
        r = response["content"]['out']
        t1.delete(0.0, 'end')
        t1.insert('end', r)
b2 = tk.Button(root,text='中→日',width=8,font=("楷体"),command=translate)
b2.place(x=200, y=105, anchor='n')

def translate():
        url = 'http://fy.iciba.com/ajax.php?a=fy'
        headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
            }
        data = {
                'f': 'ja',
                't': 'zh-CN',
                'w': t1.get(0.0,'end')
                }
        response = requests.post(url, data=data, headers = headers).json()
        r = response["content"]['out']
        t1.delete(0.0, 'end')
        t1.insert('end', r)
b3 = tk.Button(root,text='日→中',width=8,font=("楷体"),command=translate)
b3.place(x=300, y=105, anchor='n')

def translate():
        url = 'http://fy.iciba.com/ajax.php?a=fy'
        headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
            }
        data = {
                'f': 'zh-CN',
                't': 'de',
                'w': t1.get(0.0,'end')
                }
        response = requests.post(url, data=data, headers = headers).json()
        r = response["content"]['out']
        t1.delete(0.0, 'end')
        t1.insert('end', r)
b4 = tk.Button(root,text='中→德',width=8,font=("楷体"),command=translate)
b4.place(x=100, y=150, anchor='n')

def translate():
        url = 'http://fy.iciba.com/ajax.php?a=fy'
        headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
            }
        data = {
                'f': 'de',
                't': 'zh-CN',
                'w': t1.get(0.0,'end')
                }
        response = requests.post(url, data=data, headers = headers).json()
        r = response["content"]['out']
        t1.delete(0.0, 'end')
        t1.insert('end', r)
b5 = tk.Button(root,text='德→中',width=8,font=("楷体"),command=translate)
b5.place(x=200, y=150, anchor='n')

def clean():
    t1.delete(0.0,'end')

b6 = tk.Button(root,text='清除',width=8,font=("楷体"),command=clean)
b6.place(x=300, y=150, anchor='n')
root.mainloop()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值