用Charles爬取数据
windows用fiddler也差不多。
Charles是一个多平台的抓包工具,可以很方便的抓取http和https数据。
1.抓取数据
抓取数据前我们首先要清楚,由于有道词典的翻译使用的是post请求,所以我们要抓取的信息有:url链接、request headers(请求头)、format data(数据表单,也即请求体request body)
a)打开Charles,选择Proxy选项卡中的macOS Proxy选项。
b)打开浏览器,输入网址 http://fanyi.youdao.com,然后在左边的输入框输入要翻译的内容。
c)打开Charles,点击左边的Structure选项卡,依次点击找到箭头指示的内容,可以在右边的OvervIEw选项卡中看到基本的请求信息,这里我们需要的url链接就出现了。
d)点击右边的content选项卡,再点击Raw选项卡,就可以看到原始的请求数据,红框所示是请求头信息,蓝框所示是请求体信息。
2. 整理数据
a)将找到url链接、请求头以及请求体数据复制到sublime编辑器中。
b)利用sublime的替换功能,将数据整理成我们写程序时想要的python中字典的形式。
2
代码实现
闲话不多说,先贴代码
import urllib.parse import urllib.requestdef 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 = {
进行url编码
'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文件(传入了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 retif name == "main":
youdao()
运行结果:
注意点:
1.如果使用原始的url进行爬取,会返回erro500的错误,我们需要将原始的请求url里面的"_o"去掉,这样服务器就不会进行验证。
2.代码对请求体进行了url编码后,还进行了二进制编码,因为http请求用的是二进制,所以要进行编码,才能发送post请求。
3.请求包体里面的'i',是我们用户输入的翻译内容,所以这是我们要自定义输入的地方。
3
图形界面
代码基本实现后,觉得有点无趣,就用python3自带的tkinter写了个小的图形界面出来,代码如下:
from tkinter import * import urllib.parse import urllib.requestdef youdao(words):
构建urlurl = '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 = {
进行url编码
'i': words,'typoResult':'true'
}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 retroot = 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)
调用youdao函数,传进要翻译的内容
l2.place(x = 20,y =60)
var2 = StringVar()
output_text = Entry(root,textvariable = var2)
output_text.place(x = 100,y =60)def func():
print(words)
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打造!所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)