import urllib.request
import urllib.parse
import json
while 1: content=input("请输入要翻译的内容:")
url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link"
data={}
data['type']='AUTO'
data['i']=content
data['doctype']='json'
data['keyfrom']='fanyi.web'
data['ue']='UTF-8'
data['typoResult']='true'
data=urllib.parse.urlencode(data).encode('utf-8') #urlencode()主要作用就是将url附上要提交的数据。 response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
target=json.loads(html)
print("翻译结果: %s" % (target['translateResult'][0][0]['tgt']))

这是form Data中的内容

  1. i:
    你好
  2. from:
    AUTO
  3. to:
    AUTO
  4. smartresult:
    dict
  5. client:
    fanyideskweb
  6. salt:
    1497075070071
  7. sign:
    fbdf42a5b8f48f0defc722823ef1be6b
  8. doctype:
    json
  9. version:
    2.1
  10. keyfrom:
    fanyi.web
  11. action:
    FY_BY_CLICKBUTTON
  12. typoResult:
    true

进行分析,首先引入三个模块,

首先找到网页版有道词典的在线翻译打开检查,找到network,随便翻译一段话,打开产生的数据,

找到在Headers下的form Data表

我们要解决,如何用python进行POst表单提交:这里urlopen函数有一个data参数,如果我们给这个参数赋值,那么请求就是POST方式

如果data没有赋值HTTP请求就是GET方式

在python3的文档里,告诉我们要使用data这个参数,就必须要用urllib.request.urlopen()将其转换为某种格式

step:

我们首先要将data表单的内容进行赋值,不难发现,我们提交的要翻译的内容是通过表单中“i”这一项来传递的。

然后对data进行赋值,注意格式也要转换,并且使用“utf-8”解码

下面利用urllib.request.urlopen()来打开url,并且使用第二参数,将data提交

得到的html页面

由于数据交换使用json传输,这里我们用json.loads()解码,并且将值赋给target

target的值其实是一个字典,

{'smartResult': {'entries': ['', 'hello;hi'], 'type': 1}, 'translateResult': [[{'tgt': 'How are you', 'src': '你好'}]], 'elapsedTime': 1, 'errorCode': 0, 'type': 'ZH_CN2EN'}

字典的操作忘了吗,复习一遍吧:

>>>target={'smartResult': {'entries': ['', 'hello;hi'], 'type': 1}, 'translateResult': [[{'tgt': 'How are you', 'src': '你好'}]], 'elapsedTime': 1, 'errorCode': 0, 'type': 'ZH_CN2EN'}

>>>print(target['translateResult']

[[{'tgt': 'How are you', 'src': '你好'}]]

>>>print(target['translateResult'][0][0]['tgt'])

How are you

over!

(伪造表单,打开页面提交表单,获得返回response,从response中提取结果)

知识点:

1,data=urllib.parse.urlencode(data)

 

2,response=urllib.request.urlopen(url,data) urlopen第二参数打开url,提交form data

最新文章

  1. angular 后台交换实例
  2. iOS runtime 知识点整理
  3. MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集
  4. rocksDB 安装问题简单介绍
  5. Windows环境下安装pip,方便你的开发
  6. Use filter in outlook2013
  7. Nginx1.9.0的安装
  8. C# int转byte[],byte[]转int
  9. 安装python3.4
  10. android学习精要
  11. 聊聊单元測试(一)——EasyMock
  12. c#简单实现二维数组和二维数组列表List<>的转置
  13. 2MySQL Server 系统架构
  14. sql预编译&动态语句静态语句
  15. delphi的流操作的语法
  16. 【原创】研发应该懂的binlog知识(下)
  17. hdu1255扫描线计算覆盖两次面积
  18. PICE(3):CassandraStreaming - gRPC-CQL Service
  19. android自定义控件 几种方式总结
  20. .NET4.5新特性async和await修饰符实现异步编程

热门文章

  1. 安装多个java后,java版本不对
  2. day5_集合
  3. springmvc shiro整合cas单点登入
  4. 数组的filter与includes方法
  5. kmeans笔记
  6. 用CSS来画空心三角形的方法
  7. mysql 操作sql语句 目录
  8. vue-自定义全局键盘码
  9. PHP 测试杂项
  10. Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系