Python零基础之通过post请求实现有道翻译小程序(urllib,request,post,parse,json)

  • 通过有道在线翻译页面的请求接口,利用post实现翻译小程序
  • 通过浏览器测试获取数据请求的链接
# !/usr/bin/python
# Filename: 有道翻译实现post请求.py
# Data    : 2020/07/16
# Author  : --king--
# ctrl+alt+L自动加空格格式化


import urllib.request
import urllib.parse
import json

# 目标:通过post实现有道翻译的小功能

# 获取想翻译的文字
key = input('请输入您想要翻译的文字:')

# 构造POST内容
data = {
    'i': key,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '15949097071450',
    'sign': '51d443b018a380fed2e86bd67dfbeace',
    'ts': '1594909707145',
    'bv': '0ea2f265e69dc7094ed5f0b64ef39e0b',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_CLICKBUTTION'
}
# print(data)

# 编码工作使用urllib的parse.urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串,同时把汉字编码成ASCII码
data = urllib.parse.urlencode(data)
# print(data)

# 由于POST请求提交的是二进制字节流,所以要对data进行类型转换
data = bytes(data,'utf-8')

# url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 实际发现该网址存在问题,_o很可疑,url打开会报错
# 尝试http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule发现网页可以正常打开
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

# 构造header
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}

# 对网页发起请求,插入post值
req = urllib.request.Request(url,data,headers=headers)

# 获得返回值
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')

# 发现返回值是一个字符串,里边有字典数据,是典型的json数据结构
# 从post传入的data数据来看,页的确是json格式
# print(html,type(html))

# 用json.loads把格式转化为字典
result_temp = json.loads(html)
# print(result,type(result))

# 处理返回值,通过字典k-v操作和切片获取翻译结果
result = result_temp['translateResult'][0][0]

# 打印结果,验证翻译传入的数据和返回的数据是否一致
if key == result['src']:
    print('您想要翻译的文字:',key)
    print('翻译结果是:',result['tgt'])

else:
    print('程序出错,请调试')

  • 需要注意的几点:
  • 1.通过浏览器抓包network测试,获得请求数据格式并构造成字典格式
  • 2.urllib.parse.urlencode()需要传入的是字典,可以实现key:value到key=value格式的转换;可以实现汉字到ASCII编码的转换
  • 3.post提交的数据是二进制字节流数据,需要进行bytes()的转换
  • 4.url请求的网址不一定正确,服务器端可能进行转换,正确的请求网址可以通过观察,然后猜想测试
  • 5.返回的json字符串数据需要通过json.load()转换为python格式
  • 6.返回值的处理可以通过[key]和切片[]获得最后的数据
  • 7.进行传入值key和服务器返回值中的result[‘src’]进行比对,从而及时发现程序错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kingx3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值