1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python学习-有道翻译实现post请求(Python自带模块))

Python学习-有道翻译实现post请求(Python自带模块))

时间:2023-05-05 04:39:08

相关推荐

Python学习-有道翻译实现post请求(Python自带模块))

1、前期准备工作

打开chrome浏览器,进入“百度一下”页面,在搜索框输入有道翻译,进入有道翻译官网,右击鼠标选择检查,进入开发者模式,然后在需要翻译的文本框输入翻译内容,接着在Network中找到请求文件translate_o?smartresult=dict&smartresult=rule,点击该文件进去,在 Headers的General中可以看到请求的URL(这里需要注意,由于有道词典的后台工作人员对URL进行了处理,需要要把url中的‘_o’去掉才能请求访问到我们想要的数据)为’/translate?smartresult=dict&smartresult=rule’,请求方式(Request Method)为POST,在Form data可以看到相应的表单数据,具体操作如下图所示:

表单数据如下:

通过输入不同的翻译内容,观察表单数据的变化,我们可以发现,'i’的值就是翻译内容,因此在不写死翻译内容的情况下,我们可以用input方法来获取。另外从’doctype’的值我们可以知道,这是一个json类型的字典数据。

2、需求

我们的需求很简单,就是通过post请求的表单提交来实现根据用户输入翻译内容的有道翻译小测试。

3、代码实现

import urllib.requestimport urllib.parseimport json# 获取用户要翻译的内容content = input('请输入要翻译的内容:')# 创建表单数据(字典)data = {'i': content,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '15948294892747','sign': 'a9341cf6b1c6cf970f2166ac11400a34','ts': '1594829489274','bv': '0b8abb4d55c472d2785cbbae07501f9b','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}# 对字典数据进行编码form_data = urllib.parse.urlencode(data)# 把编码好的表单数据转换为字节流数据 bytesform_data_bytes = bytes(form_data,'utf-8')# 发起请求,注意URL /translate_o?smartresult=dict&smartresult=rule的_o要去掉url = '/translate?smartresult=dict&smartresult=rule'# 加入请求头,以免被反爬headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}response = urllib.request.Request(url,data=form_data_bytes,headers=headers)# 获取响应对象obj = urllib.request.urlopen(response)# 读取响应内容html =obj.read().decode('utf-8')print(type(html),html) # 可以看到html的类型是一个字符串str,而且是json类型的字符串。'''输入‘你好’之后得到以下结果:<class 'str'> {"type":"ZH_CN2EN","errorCode":0,"elapsedTime":0,"translateResult":[[{"src":"你好","tgt":"hello"}]]}'''# 优化输出结果,希望输入'你好',得到的结果是'hello',因此需要把上述的json类型的字符串转换为字典html_dict = json.loads(html)# 目的是找到字典的'hello'值(层层分解)translate_result = html_dict['translateResult'][0][0]['tgt']print(translate_result)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。