您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

5b51 2022/1/14 8:24:29 python 字数 17351 阅读 624 来源 www.jb51.cc/python

用Charles爬取数据 Windows用Fiddler也差不多。 Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据。

概述

用Charles爬取数据

Windows用fiddler也差不多。

Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据。

1.抓取数据

抓取数据前我们首先要清楚,由于有道词典的翻译使用的是post请求,所以我们要抓取的信息有:url链接、request headers(请求头)、format data(数据表单,也即请求体request body)

a)打开Charles,选择Proxy选项卡中的macOS Proxy选项。

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

b)打开浏览器,输入网址 http://fanyi.youdao.com,然后在左边的输入框输入要翻译的内容

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

c)打开Charles,点击左边的Structure选项卡,依次点击找到箭头指示的内容,可以在右边的Overview选项卡中看到基本的请求信息,这里我们需要的url链接就出现了。

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

d)点击右边的content选项卡,再点击Raw选项卡,就可以看到原始的请求数据,红框所示是请求头信息,蓝框所示是请求体信息。

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

2. 整理数据

a)将找到url链接、请求头以及请求体数据复制到sublime编辑器中。

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

b)利用sublime的替换功能,将数据整理成我们写程序时想要的python中字典的形式。

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

2

代码实现

闲话不多说,先贴代码

import urllib.parse 
import urllib.request 

def youdao():

构建url链接

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

这里要去掉?号前面的_o,不然会进行加密算法,导致失败

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

构建请求头

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}
words = input("请输入要翻译的内容:")

构建请求体

format_data = {
'i': words,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'1526368137702','sign':'f0cd13ef1919531ec9a66516ceb261a5','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'
}

进行url编码

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

获取request文件(传入了data参数,就是post请求)

request = urllib.request.Request(url,data = format_data,headers = headers)

打开请求文件

response = urllib.request.urlopen(request)

读取文件内容

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

if name == "main":
youdao()

def youdao():

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}
words = input("请输入要翻译的内容:")

format_data = {
'i': words,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'1526368137702','sign':'f0cd13ef1919531ec9a66516ceb261a5','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'
}

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

request = urllib.request.Request(url,data = format_data,headers = headers)

response = urllib.request.urlopen(request)

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

if name == "main":
youdao()

def youdao():

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}
words = input("请输入要翻译的内容:")

format_data = {
'i': words,'from':'AUTO','to':'AUTO','smartresult':'dict','client':'fanyideskweb','salt':'1526368137702','sign':'f0cd13ef1919531ec9a66516ceb261a5','doctype':'json','version':'2.1','keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'false'
}

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

request = urllib.request.Request(url,data = format_data,headers = headers)

response = urllib.request.urlopen(request)

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

if name == "main":
youdao()

运行结果:

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

注意点:

1.如果使用原始的url进行爬取,会返回erro500的错误,我们需要将原始的请求url里面的"_o"去掉,这样服务器就不会进行验证。

2.代码对请求体进行了url编码后,还进行了二进制编码,因为http请求用的是二进制,所以要进行编码,才能发送post请求。

3.请求包体里面的'i',是我们用户输入的翻译内容,所以这是我们要自定义输入的地方。

3

图形界面

代码基本实现后,觉得有点无趣,就用python3自带的tkinter写了个小的图形界面出来,代码如下:

from tkinter import * 
import urllib.parse 
import urllib.request 

def youdao(words):

构建url

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

构建请求头

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}

构建请求体

format_data = {
'i': words,'typoResult':'true'
}

进行url编码

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

获取request文件(传入了data参数,就是post请求)

request = urllib.request.Request(url,headers = headers )

打开请求文件

response = urllib.request.urlopen(request)

读取文件内容

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

主程序

root = Tk()

设置标题

root.title("呆瓜词典")

设置主窗口大小

root.geometry("320x150")

可变大小

root.resizable(width=False,height=True)

第一排输入框 输入查询内容

左边是一个标签

l1 = Label(root,text = '查询内容',bg = "yellow",font = (12),height = 1,width = 8)
l1.place(x = 20,y = 20)
var1 = StringVar()
input_text = Entry(root,textvariable = var1)
input_text.place(x = 100,y = 20)

第二排显示显示查询的结果

左边是一个标签

l2 = Label(root,text = '查询结果',width = 8)
l2.place(x = 20,y =60)
var2 = StringVar()
output_text = Entry(root,textvariable = var2)
output_text.place(x = 100,y =60)

调用youdao函数,传进要翻译的内容

def func():
words = var1.get()
if words:

print(words)

result = youdao(words)
var2.set(result)

添加一个按钮

b = Button(root,text = "查询",command = func)
b.place(x = 170,y = 100)

运行主程序

root.mainloop()

def youdao(words):

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}

format_data = {
'i': words,'typoResult':'true'
}

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

request = urllib.request.Request(url,headers = headers )

response = urllib.request.urlopen(request)

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

root = Tk()

root.title("呆瓜词典")

root.geometry("320x150")

root.resizable(width=False,height=True)

l1 = Label(root,text = '查询内容',bg = "yellow",font = (12),height = 1,width = 8)
l1.place(x = 20,y = 20)
var1 = StringVar()
input_text = Entry(root,textvariable = var1)
input_text.place(x = 100,y = 20)

l2 = Label(root,text = '查询结果',width = 8)
l2.place(x = 20,y =60)
var2 = StringVar()
output_text = Entry(root,textvariable = var2)
output_text.place(x = 100,y =60)

def func():
words = var1.get()
if words:

result = youdao(words)
var2.set(result)

b = Button(root,text = "查询",command = func)
b.place(x = 170,y = 100)

root.mainloop()

def youdao(words):

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

headers = {
"User-Agent" : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0'
}

format_data = {
'i': words,'typoResult':'true'
}

format_data = urllib.parse.urlencode(format_data).encode("utf-8")

request = urllib.request.Request(url,headers = headers )

response = urllib.request.urlopen(request)

content = response.read()
content = eval(content)
ret = content["translateResult"][0][0]['tgt']

print(ret)
return ret

root = Tk()

root.title("呆瓜词典")

root.geometry("320x150")

root.resizable(width=False,height=True)

l1 = Label(root,text = '查询内容',bg = "yellow",font = (12),height = 1,width = 8)
l1.place(x = 20,y = 20)
var1 = StringVar()
input_text = Entry(root,textvariable = var1)
input_text.place(x = 100,y = 20)

l2 = Label(root,text = '查询结果',width = 8)
l2.place(x = 20,y =60)
var2 = StringVar()
output_text = Entry(root,textvariable = var2)
output_text.place(x = 100,y =60)

def func():
words = var1.get()
if words:

result = youdao(words)
var2.set(result)

b = Button(root,text = "查询",command = func)
b.place(x = 170,y = 100)

root.mainloop()

进群:960410445  即可获取源码!

运行效果

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!

中英文都可以翻译,至此任务就完成了。

总结

以上是编程之家为你收集整理的英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!全部内容,希望文章能够帮你解决英语没学好?不要紧!自己弄一个翻译软件就行了!Python打造!所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶