你平时是怎样使用有道翻译的?

一般人都是这样使用的吧:

1.打开有道翻译

有道 翻译 接口 android 有道翻译url_post


2.输入要翻译的字符

有道 翻译 接口 android 有道翻译url_python_02


3.复制翻译内容,over

是的,我们都是这样使用有道翻译的,但是今天我要教大家一种通过Python爬虫使用有道翻译的方法!

首先我们来讲一下POST请求和GET请求的区别
最显著的区别就是Get请求的url会附带查询参数,查询参数在QueryString里保存
Post请求的url不会附带查询参数,查询参数在Form表单里保存
什么意思?
举个例子,百度翻译为GET请求,而有道翻译为POST请求
例如百度翻译为Get请求,原始url地址为:https://fanyi.baidu.com/
翻译字符串‘Python’后url地址为:https://fanyi.baidu.com/#en/zh/Python
url地址发生了变化,附带了我们要翻译的字符串

有道翻译为Post请求,原始地址为:http://fanyi.youdao.com/
翻译字符串‘Python’后,地址仍然为:http://fanyi.youdao.com/
url地址并未发生变化,我们的查询参数在Form表单里面保存

ok,知道了POST请求的一些特点,我们就开始POST请求有道翻译吧

首先引入所需模块

import urllib
import urllib.request#导入urllib2

创建一个headers,下面的完整的header是内容我是直接从Fillder里面copy的

在抓包软件Fillder界面的这个地方

有道 翻译 接口 android 有道翻译url_java_03


其中‘Accept-Encoding: gzip, deflate’这个不能要,否则爬取后为压缩格式

HOST也不要写,Cookie这些也可以不写,为了保持完整性,我还是保留了较多的内容,其实只写一个

‘User-Agent’:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36’就ok

headers={'Accept':'application/json, text/javascript, */*; q=0.01',
         'X-Requested-With':'XMLHttpRequest',
         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
         'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
         'Cookie': 'OUTFOX_SEARCH_USER_ID=-1306211847@10.108.160.101; JSESSIONID=aaa75C-jD32s49lp0qyhx; OUTFOX_SEARCH_USER_ID_NCOO=1780482667.2868145; ___rl__test__cookies=1588471894311'
        }

获取url地址,这个url地址不是浏览器中显示的,是抓包软件Fillder的POST内容

url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'#通过fillder抓包抓到的地址

创建用户接口

key=input('请输入需要翻译的文字:')

创建表单,储存发送到web的表单数据,这里的表单内容也是通过Fillder 抓取到的,表单内容在这个界面

有道 翻译 接口 android 有道翻译url_有道 翻译 接口 android_04


我标蓝的那一行,可以通过使用sublime text 将这一行转成表单格式,在‘查找’–‘替换’那里,这里我就不多写了,我们要翻译的字符串就是 ‘i’ 代表的值,所以我们把 ‘i’ 对应一个变量 ‘key’

formdata={
'type':'AUTO',
'i':key,
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_REALTlME',
}

对表单数据通过urlencode()转码

data=urllib.parse.urlencode(formdata).encode("utf-8")#转码

创建请求,并输出请求内容

#创建请求
request=urllib.request.Request(url,data=data,headers=headers)
#输出请求到的值
print(urllib.request.urlopen(request).read().decode("utf-8"))

OK,运行一下,输入一个‘hello world’

有道 翻译 接口 android 有道翻译url_python_05


得到一些json格式的代码

有道 翻译 接口 android 有道翻译url_post_06


复制,打开json.cn

有道 翻译 接口 android 有道翻译url_json_07


ok,得到了翻译内容

当然了,一般人谁这样用有道翻译啊,这就是一个POST请求的小案例啦,O(∩_∩)O哈哈~

关注欢喜,走向成功~