在实现这一功能时遇到了一些困难,由于按照《零基础入门python》中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: http://ai.youdao.com”这种神奇的错误。无奈百度,在一篇不错的博主上找到一个优化的代码,可以实现。分享一下链接https://blog.csdn.net/c406495762/article/details/59095864#comments

 from urllib import request
from urllib import parse
import json if __name__ == "__main__":
# 对应上图的Request URL
request_url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
# 创建Form Data字典,存储上图中的Form Data
Form_Data = {}
Form_Data['i'] = 'love'
Form_Data['from'] = 'AUTO'
Form_Data['to'] = 'AUTO'
Form_Data['smartresult'] = 'dict'
Form_Data['client'] = 'fanyideskweb'
Form_Data['doctype'] = 'json'
Form_Data['version'] = '2.1'
Form_Data['keyfrom'] = 'fanyi.web'
Form_Data['action'] = 'FY_BY_REALTIME'
Form_Data['typoResult'] = 'false'
# 使用urlencode方法转换标准格式
data = parse.urlencode(Form_Data).encode('utf-8')
# 传递Request对象和转换完格式的数据
response = request.urlopen(request_url, data)
# 读取信息并解码
html = response.read().decode('utf-8')
# 使用json
translate_results = json.loads(html)
# 找到翻译结果
translate_result = translate_results["translateResult"][0][0]['tgt']
# 打印翻译结果
print("翻译的结果是 %s" % translate_result)

还有一个我在上面报错的链接里的API看到了一个版本,写了一个对应匹配参数要求的爬虫。

(原demo无法正常运行。。我是少了个包所以就自己改写了)

对了,使用这个方法需要在有道智云注册一个账号(收费的,不过第一次注册送100)然后需要进入我的应用里创个新应用,里面的接入方式选API,就能得到一个账号密码了

这是我修改demo后的代码

# -*- coding: utf-8 -*-
import sys
import uuid
import urllib.request
import urllib.parse
import hashlib
import time
import json YOUDAO_URL = 'http://openapi.youdao.com/api'
APP_KEY = 'ID用自己的吧2333'
APP_SECRET = '密码当然也是' def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest() def truncate(q):
if q is None:
return None
size = len(q)
return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size] def do_request(data):
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
return urllib.request.Request(YOUDAO_URL, data=data, headers=headers) q = input("请输入查询的单词:\n") data = {}
data['from'] = 'EN'
data['to'] = 'zh-CHS'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
data = urllib.parse.urlencode(data).encode('utf-8')
req = do_request(data)
response = urllib.request.urlopen(req)
html = response.read().decode()
target = json.loads(html)
print(target['web'][0]['value'])
#上面的输出可以自己定义,输出target看自己需求输出吧

python3爬虫:利用urllib与有道翻译获得翻译结果的更多相关文章

  1. Python3爬虫 利用百度地图api得到城市经纬度

    有2种方式,第一种是利用urllib , 方法1:利用urllib , 先把url 转成urlcode,然后读取网页,读到网页再用json读取内容,比较麻烦. 可以在浏览器输入,看一下格式. http ...

  2. python3爬虫之Urllib库(一)

    上一篇我简单说了说爬虫的原理,这一篇我们来讲讲python自带的请求库:urllib 在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了 ...

  3. python3爬虫 - 利用浏览器cookie登录

    http://blog.csdn.net/pipisorry/article/details/47980653 爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证 ...

  4. python3爬虫之Urllib库(二)

    在上一篇文章中,我们大概讲了一下urllib库中最重要的两个请求方法:urlopen()  和  Request() 但是仅仅凭借那两个方法无法执行一些更高级的请求,如Cookies处理,代理设置等等 ...

  5. 6.python3爬虫之urllib库

    # 导入urllib.request import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 response = urllib.request.urlo ...

  6. python3 爬虫利用Requests 实现下载进度条

    一.编写代码 from datetime import datetime,date,timedelta from contextlib import closing import urllib,url ...

  7. python3爬虫之urllib初探

    urllib主要包含request(请求模块).error(异常处理模块).parse(工具模块).robotparser(识别网站的robots.txt文件,是否允许爬取). request(请求模 ...

  8. 爬虫模拟有道字典进行翻译,还发现了一条好玩的js

    08.14自我总结 爬虫模拟有道字典进行翻译 一.代码 import requests from lxml.html import etree # headers= { # 'User-Agent': ...

  9. 爬虫之urllib包

    urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...

随机推荐

  1. L0,L1,L2正则化浅析

    在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...

  2. JNI的第2种写法:本地方法注册

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 孔乙己说,茴香豆的茴有四种写法,今天谈谈JNI的第2种写法:本地方法注册. 这种写法的好处是不需要使用ja ...

  3. 【MySQL优化】数据库结构优化

    原则: 设计表结构,字段类型,最小化磁盘存储的空间,减少IO.数据库操作中最为耗时的操作就是 IO 处理,大部分数据库操作 90% 以上的时间都花在了 IO 读写上面.所以尽可能减少 IO 读写量,可 ...

  4. 使用Eclipse开发学习 Spring Boot 教程的内容小结

    spring-tool-suite使用教程,并创建spring配置文件 Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTful ...

  5. UML-如何画顺序图?

    1.生命线框图和生命线 生命线:可以为虚线(源于UML1),也可以是实线 2.消息 1).创始消息,实心圆开头2).同步消息,实心箭头 3.执行规格条和控制期 控制期:阻塞调用 4.返回值 5.自身消 ...

  6. Acunetix WVS安全测试软件使用教程(入门级)

    1.下载 Acunetix WVS 10.5软件,下载地址为:https://pan.baidu.com/s/1Koku0Lhya5PgphMVL7w19g 密码:v438 2.压缩包中有破解说明,按 ...

  7. mac 下webstorm调节字体大小

    ctr+shift+A功能可以搜索对应功能. 在弹出框中输入Zoom可以轻松设置. 而且有关zoom的功能全部列出. 真是方便. 搜索到change font size with ctrl + whe ...

  8. ORM表之间高级设计

    ORM表之间高级设计 一.表的继承 # db_test1 # 一.基表 # Model类的内部配置Meta类要设置abstract=True, # 这样的Model类就是用来作为基表 # 多表:Boo ...

  9. [Algo] 223. Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  10. 基础服务系列-Jupyter Install TensorFlow

    TensorFlow is a deep learning framework that provides an easy interface to a variety of functionalit ...