python3爬虫:利用urllib与有道翻译获得翻译结果
在实现这一功能时遇到了一些困难,由于按照《零基础入门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与有道翻译获得翻译结果的更多相关文章
- Python3爬虫 利用百度地图api得到城市经纬度
有2种方式,第一种是利用urllib , 方法1:利用urllib , 先把url 转成urlcode,然后读取网页,读到网页再用json读取内容,比较麻烦. 可以在浏览器输入,看一下格式. http ...
- python3爬虫之Urllib库(一)
上一篇我简单说了说爬虫的原理,这一篇我们来讲讲python自带的请求库:urllib 在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了 ...
- python3爬虫 - 利用浏览器cookie登录
http://blog.csdn.net/pipisorry/article/details/47980653 爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证 ...
- python3爬虫之Urllib库(二)
在上一篇文章中,我们大概讲了一下urllib库中最重要的两个请求方法:urlopen() 和 Request() 但是仅仅凭借那两个方法无法执行一些更高级的请求,如Cookies处理,代理设置等等 ...
- 6.python3爬虫之urllib库
# 导入urllib.request import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 response = urllib.request.urlo ...
- python3 爬虫利用Requests 实现下载进度条
一.编写代码 from datetime import datetime,date,timedelta from contextlib import closing import urllib,url ...
- python3爬虫之urllib初探
urllib主要包含request(请求模块).error(异常处理模块).parse(工具模块).robotparser(识别网站的robots.txt文件,是否允许爬取). request(请求模 ...
- 爬虫模拟有道字典进行翻译,还发现了一条好玩的js
08.14自我总结 爬虫模拟有道字典进行翻译 一.代码 import requests from lxml.html import etree # headers= { # 'User-Agent': ...
- 爬虫之urllib包
urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...
随机推荐
- E - Two Arithmetic Progressions(CodeForces - 710D)(拓展中国剩余定理)
You are given two arithmetic progressions: a1k + b1 and a2l + b2. Find the number of integers x such ...
- 通过编写c语言程序,运行时实现打印另一个程序的源代码和行号
2017年6月1日程序编写说明: 1.实现行号的打印,实现代码的读取和输出,理解主函数中的参数含义. 2.对fgets函数理解不够 3.对return(1); return 0的含义理解不够 4.未实 ...
- JIT Debug Info 简介
原总结debug调试dump转储文件JITprocdumpJIT Debugging 前言 在上一篇介绍 JIT Debugging 的文章 -- 你需要了解的JIT Debugging 中,我们了解 ...
- Maven--排除依赖
传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理,但是有些时候这种特性也会带来问题. 例如,当前项目有一个第三方依赖,而这个第三方的依赖由于某些原因依赖了另外一个类库的 SNAPSH ...
- 884A. Book Reading#抽空学习好孩子(模拟)
题目出处:http://codeforces.com/problemset/problem/884/A 题目大意:每天时间分两部分,工作和学习,工作优先,闲暇读书,问第几天读完 #include< ...
- Python的IDE之Pycharm的使用
Python的IDE之Pycharm的使用 一.为什么用IDE(Python集成开发环境-Pycharm) 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择 ...
- Spark宽依赖、窄依赖
在Spark中,RDD(弹性分布式数据集)存在依赖关系,宽依赖和窄依赖. 宽依赖和窄依赖的区别是RDD之间是否存在shuffle操作. 窄依赖 窄依赖指父RDD的每一个分区最多被一个子RDD的分区所用 ...
- <黑马新秀>Spring学习日志
# 用于梳理Spring知识点 Spring是分层的Java EE应用全栈轻量级开源框架,以IoC(Inverse Of Control反转控制)和AOP(Aspect Oriented Progra ...
- [CTS2019]无处安放(提交答案)
由于蒟蒻太菜没报上CTS,只能在家打VP. 感觉这题挺有意思的,5h中有3h在玩这题,获得74分的“好”成绩. 说说我的做法吧: subtask1~3:手玩,不知道为什么sub2我只能玩9分,但9和1 ...
- Centos7.5 firewalld防火墙配置
CentOS 7.0默认使用的是firewall作为防火墙 1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-c ...