python3爬虫有道翻译_python3爬虫:利用urllib与有道翻译获得翻译结果

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

ContractedBlock.gif

ExpandedBlockStart.gif

1 from urllib importrequest2 from urllib importparse3 importjson4

5 if __name__ == "__main__":6 #对应上图的Request URL

7 request_url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

8 #创建Form Data字典,存储上图中的Form Data

9 Form_Data ={}10 Form_Data['i'] = 'love'

11 Form_Data['from'] = 'AUTO'

12 Form_Data['to'] = 'AUTO'

13 Form_Data['smartresult'] = 'dict'

14 Form_Data['client'] = 'fanyideskweb'

15 Form_Data['doctype'] = 'json'

16 Form_Data['version'] = '2.1'

17 Form_Data['keyfrom'] = 'fanyi.web'

18 Form_Data['action'] = 'FY_BY_REALTIME'

19 Form_Data['typoResult'] = 'false'

20 #使用urlencode方法转换标准格式

21 data = parse.urlencode(Form_Data).encode('utf-8')22 #传递Request对象和转换完格式的数据

23 response =request.urlopen(request_url, data)24 #读取信息并解码

25 html = response.read().decode('utf-8')26 #使用json

27 translate_results =json.loads(html)28 #找到翻译结果

29 translate_result = translate_results["translateResult"][0][0]['tgt']30 #打印翻译结果

31 print("翻译的结果是 %s" % translate_result)

View Code

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

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

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

1430145-20190309165551578-708318077.png

这是我修改demo后的代码

#-*- coding: utf-8 -*-

importsysimportuuidimporturllib.requestimporturllib.parseimporthashlibimporttimeimportjson

YOUDAO_URL= 'http://openapi.youdao.com/api'APP_KEY= 'ID用自己的吧2333'APP_SECRET= '密码当然也是'

defencrypt(signStr):

hash_algorithm=hashlib.sha256()

hash_algorithm.update(signStr.encode('utf-8'))returnhash_algorithm.hexdigest()deftruncate(q):if q isNone:returnNone

size=len(q)return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]defdo_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看自己需求输出吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值