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

python 翻译爬虫的更多相关文章

  1. python基础爬虫,翻译爬虫,小说爬虫

    基础爬虫: # -*- coding: utf-8 -*- import requests url = 'https://www.baidu.com' # 注释1 headers = { # 注释2 ...

  2. Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  3. Python 正则表达式 (python网络爬虫)

    昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...

  4. 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

    本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...

  5. 学习推荐《精通Python网络爬虫:核心技术、框架与项目实战》中文PDF+源代码

    随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来.对特定的数据进 ...

  6. Python写爬虫-爬甘农大学校新闻

    Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you ne ...

  7. Python 简单爬虫案例

    Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...

  8. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

  9. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

随机推荐

  1. [ovs] openvswitch ovs ovs-vsctl ovs-appctl 命令行参数自动补全 bash bash-completion

    1, 安装bash_completion: [root@vrouter1 ~]# yum install bash-completio 2,  找到你的ovs的补全脚本装在了哪里 [root@vrou ...

  2. 转:eval(data)和eval("("+data+")")

    http://www.w3school.com.cn/jsref/jsref_eval.asp JavaScript eval() 函数:eval() 函数可计算某个字符串,并执行其中的的 JavaS ...

  3. 内部排序->插入排序->希尔排序

    文字描述 希尔排序又称缩小增量排序,也属于插入排序类,但在时间效率上较之前的插入排序有较大的改进. 从之前的直接插入排序的分析得知,时间复杂度为n*n, 有如下两个特点: (1)如果待排序记录本身就是 ...

  4. MySQL 数据库登录查询

    1. 进入到bin目录:   键入cd..,一直到出现C:\ 为止   然后cd bin所在路径:   如: C:\cd C:\Program Files\MySQL\MySQL Server 5.7 ...

  5. js中常用的offset client screen对象

    javascript中offsetWidth.clientWidth.width.scrollWidth.clientX.screenX.offsetX.pageX offsetWidth //返回元 ...

  6. 8.1-uC/OS-III多任务应用

    1.app.c: ( 1) .分别为每个任务分配一个OS_TCB. (2). 斥信号量( mutex)是一个内核对象(一个结构体),用于保护共享资源.任务要访问共享资源就必须先获得 mutex. mu ...

  7. 【托业】【新托业TOEIC新题型真题】学习笔记1--题库一-->P1~4

    P1~4--------------------------------------单词-------------------------------------- status 雕像 couple ...

  8. MongoDB的客户端管理工具--nosqlbooster 连接MongoDB服务器

    nosqlbooster的官网地址为https://nosqlbooster.com.大家如果想直接下载,可以登入下载网址https://nosqlbooster.com/downloads. 下载w ...

  9. dedecms清空所有文章怎么操作?sql语句如何写?

    小C新建了一个站,确切的说是复制,出于seo考虑,决定清空所有文章,那么dedecms清空所有文章怎么操作?sql语句如何写呢?特别提醒:修改之前一定要先做好备份,以防万一!下面的语句在迫不得已的情况 ...

  10. android下的样式

    android中控件,假如我们把样式都写死在控件的配置文件上的话.一旦改动可谓牵一发而动千军.那么我们能够把样式写在style.xml文件里.然后引用,在API14以上版本号. 该文件位于values ...