思路
分析有道在线翻译的请求、响应信息
使用Google Chrome浏览器进行分析,如图:
1.获取到Request URL
2.获取到请求头信息
3.获取到要传递给服务器的表单信息
4.响应体,可以看出是Json格式数据
编写代码思路
1.根据以上分析得到的信息,构造url、请求头、表单信息
2.获取到urllib.Request对象
3.获取响应的Json数据,并进行解析
源码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
"""
用urllib模块发送post请求,模仿有道翻译
"""
import urllib.request
import urllib.parse
import json
def translate(word):
"""根据给定词语进行POST请求,并返回json数据"""
# 请求地址url
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
# 请求头
request_headers={
"Accept":"application/json, text/javascript, */*; q=0.01",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36",
"X-Requested-With":"XMLHttpRequest"
}
# 发送给服务器的表单
form_data={
"i":word,
"from":"AUTO",
"to":"AUTO",
"smartresult":"dict",
"doctype":"json",
"version":"2.1",
"keyfrom":"fanyi.web",
"action":"FY_BY_REALTIME",
"typoResult":"false"
}
# POST发送的data必须为bytes或bytes类型的可迭代对象,不能是字符串
form_data=urllib.parse.urlencode(form_data).encode()
# 构造请求对象Request
req=urllib.request.Request(url,data=form_data,headers=request_headers)
# 发起请求
response=urllib.request.urlopen(req)
data=response.read().decode()
return data
def parse_data(data):
"""解析json数据"""
res=json.loads(data)
src=res["translateResult"][0][0]["src"]
tgt=res["translateResult"][0][0]["tgt"]
print("{} --> {}".format(src,tgt))
if __name__=="__main__":
while True:
word = input("输入: ")
if word=='q':
break
data=translate(word)
print(data)
# 解析json数据
parse_data(data)
运行结果