在有道翻译页面中打开开发者工具,在Headers板块找到Request URL以及相应的data。

import urllib.request
import urllib.parse
import json content=input('请输入需要翻译的内容:') #_o要去掉,否则会出先error_code:50的报错
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' data={}
#开发者工具里有,i和doctype键不可少
data['i']=content
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']=''
data['sign']='5b0565493d812bc5e713b895c12d615d'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_REALTTIME' #将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型
data=urllib.parse.urlencode(data).encode('utf-8') #向url请求data的响应结果
response=urllib.request.urlopen(url,data) #读取返回数据内容,decode是转换返回数据的格式为str
html=response.read().decode('utf-8') #使用json将字符串转化成字典
target=json.loads(html) #结果在key='translateResult'的三层列表的key='tgt'中
print("翻译结果:%s" %(target['translateResult'][0][0]['tgt']))

  

上面这种很大可能被有道网页给识别出来不是人工在访问,而是代码在访问。

此时我们可以加个‘User-Agent’代理。通过设置User Agent来达到隐藏身份的目的,一般情况下浏览器是通过User-Agent来识别的。

通过调用urllib.request.Request()来设置UA。

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

This class is an abstraction of a URL request.

  url should be a string containing a valid URL.

  headers should be a dictionary #headers要为字典

有两种方法设置User Agent:

1.在创建Request对象的时候,填入headers参数(包含User Agent信息),这个Headers参数要求为字典;

2.在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。

import urllib.request
import urllib.parse
import json
import time while True: content=input('请输入需要翻译的内容(输入"q!退出程序"):') if content=='q!':
break; #_o要去掉,否则会出先error_code:50的报错
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' '''
第一种方法
head={}
head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
''' data={}
#开发者工具里有,i和doctype键不可少
data['i']=content
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']=''
data['sign']='5b0565493d812bc5e713b895c12d615d'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_REALTTIME' #将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型
data=urllib.parse.urlencode(data).encode('utf-8') '''
第一种方法
req=urllib.request.Request(url,data,head)
'''
#第二种方法设置User Agent
#创建Request对象
req=urllib.request.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36') #传入创建好的Request对象
response=urllib.request.urlopen(req) #读取响应信息并解码
html=response.read().decode('utf-8') #使用json将字符串转化成字典
target=json.loads(html) #结果在key='translateResult'的三层列表的key='tgt'中
print("翻译结果:%s" %(target['translateResult'][0][0]['tgt'])) #5秒一次
time.sleep(5)

python爬有道翻译的更多相关文章

  1. Python 实现有道翻译命令行版

    一.个人需求 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性 ...

  2. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  3. Python 使用有道翻译

    最近想将一些句子翻译成不同的语言,最开始想使用Python向有道发送请求包的方式进行翻译. 这种翻译方式可行,不过只能翻译默认语言,不能选定语言,于是我研究了一下如何构造请求参数,其中有两个参数最复杂 ...

  4. python利用有道翻译实现“语言翻译器”的功能

    import urllib.request import urllib.parse import json while True: content = input('请输入需要翻译的内容(退出输入Q) ...

  5. Python制作有道翻译小工具

    该工具主要是利用了爬虫,爬取web有道翻译的内容. 然后利用简易GUI来可视化结果. 首先我们进入有道词典的首页,并点击翻译结果的审查元素 之后request响应网页,并分析网页,定位到翻译结果. 使 ...

  6. python爬虫-有道翻译-js加密破解

    有道翻译-js加密破解 这是本地爬取的网址:http://fanyi.youdao.com/ 一.分析请求 我们在页面中输入:水果,翻译后的英文就是:fruit.请求携带的参数有很多,先将参数数据保存 ...

  7. python调用有道翻译api实现翻译

    通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...

  8. python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', 'query 问题

    解决办法: 修改url为手机版的地址:http://fanyi.baidu.com/basetrans User-Agent也用手机版的 测试代码: # -*- coding: utf-8 -*- & ...

  9. python爬取网易翻译 和MD5加密

    一.程序需要知识 1.python中随机数的生成 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0, ...

随机推荐

  1. 利用Flex&b 开发一门语言

    https://blog.csdn.net/CrazyHeroZK/article/details/87359818

  2. NazoHell 攻略

    http://hell.one-story.cn/hell-start.html Level 0: http://nazohell.one-story.cn/nazohell-start.html 跳 ...

  3. css3逐帧动画

    写css3动画的时候,我们经常用到animation来实现,默认情况下,animation是属于连贯性的ease动画.我们熟悉的animation动画有ease.ease-in.ease-out.li ...

  4. jenkins:新增节点是启动方式没有Launch agent by connecting it to the master

    默认在这里的配置是禁用 所以启动方式只有两种,缺少Launch agent by connecting it to the master

  5. Python Tkinter 之Listbox控件

    Listbox为列表框控件,它可以包含一个或多个文本项(text item),可以设置为单选或多选.使用方式为Listbox(root,option...). 常用的参数列表如下: 一些常用的函数:

  6. 在webstorm里使用git

    1,设置git 打开webstorm软件,找到file下面的settings(设置) 打开设置对话窗,找到version control的子级目录git,路径path输入git安装目录下bin目录里的 ...

  7. 罗辑思维首席架构师:Go微服务改造实践

    转自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圆 曾先后在 Cisco,新浪微博从事基础架构研发工作.十多年一直专注于后端技术的研发,在消息通 ...

  8. 《算法 - Lru算法》

    一:概述 - LRU 用于管理缓存策略,其本身在 Linux/Redis/Mysql 中均有实现.只是实现方式不尽相同. - LRU 算法[Least recently used(最近最少使用)] - ...

  9. 48 容器(七)——HashMap底层:哈希表结构与哈希算法

    哈希表结构 哈希表是由数组+链表组成的,首先有一个数组,数组的每一个位置都用来存储一个链表,链表的基本节点为:[hash值,key值,value值,next],当存入一个键值对时,首先调用hashco ...

  10. [LOJ#3119][Luogu5405][CTS2019]氪金手游(DP+容斥)

    先考虑外向树的做法,显然一个点在其子树内第一个出现的概率等于它的权值除以它子树的权值和.于是f[i][j]表示i的子树的权值和为j时,i子树内所有数的相互顺序都满足条件的概率,转移直接做一个背包卷积即 ...