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. [hyperscan][pkg-config] hyperscan 从0到1路线图

    经过一系列的研究学习,知识储备之后,终于,可以开始研究hyperscan了. [knowledge][模式匹配] 字符匹配/模式匹配 正则表达式 自动机 [knowledge][perl][pcre] ...

  2. DbGridEh中改变行的颜色

    DbGridEh中改变行的颜色 代码也挺简单的,只是当时没有想到: if ds2.FieldByName('AutoRead').AsInteger=0 thenbegin  DBGridEh1.Ca ...

  3. 内部排序->插入排序->直接插入排序

    文字描述: 将一个记录插入到已排好序的有序表中,从而得到一个新的.记录数增1的有序表 示意图: 算法分析: 时间复杂度为n*n,辅助存储为1,是稳定的排序方法. 代码实现: #include < ...

  4. linux下nodejs的安装

    一.下载 https://nodejs.org/en/download/ 然后,解压 二.配置环境变量 配置环境变量:在/etc/profile文件新增:export NODE_HOME=/usr/l ...

  5. html 标签笔记

    <一.HTML 基础结构> <html>________________________________<head><title>无标题文档</t ...

  6. c++ 如何获取多线程的返回值?(std::thread ,std::async)

    //简单的 c++11 线程,简单方便,成员函数随便调用,非成员函数也一样,如需要获取返回时,请自行使用条件变量 std::thread run([&](){ //执行一些耗时的操作 retu ...

  7. 1、python接口测试requests

    import requestsimport jsonr=requests.get('http://www.baidu.com')                        #get 请求方式r=r ...

  8. 【WebDriver】WebDriver 常用操作

    WebDriver 常用操作 1 浏览器操作 2 窗口和弹框操作 3 cookies 操作 4 简单对象的定位 5 页面元素操作 6 鼠标事件 7 键盘事件 1 浏览器操作 #属性: driver.c ...

  9. Performance Tuning MySQL

    通常来说,MySQL性能调优是非常复杂的一件事,不是简单的修改参数就可以完成的.需要综合考虑.而且找出性能瓶颈也非易事.但是通常我们有以下的几种方法找到蛛丝马迹.通过下面的几种方法发现瓶颈以后,我们才 ...

  10. Laravel创建产品-CRUD之Create and Store

    上一篇说了laravel用crud之index列出产品items,我们现在试着添加产品,用到CRUD的 Create 和 Store 方法,打开/app/Http/Controllers/ItemCo ...