爬虫有道翻译"/>
python3爬虫有道翻译
在实现这一功能时遇到了一些困难,由于按照《零基础入门python》中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: ”这种神奇的错误。无奈百度,在一篇不错的博主上找到一个优化的代码,可以实现。分享一下链接
1 from urllib importrequest2 from urllib importparse3 importjson4
5 if __name__ == "__main__":6 #对应上图的Request URL
7 request_url = "=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,就能得到一个账号密码了
这是我修改demo后的代码
#-*- coding: utf-8 -*-
importsysimportuuidimporturllib.requestimporturllib.parseimporthashlibimporttimeimportjson
YOUDAO_URL= ''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看自己需求输出吧
更多推荐
python3爬虫有道翻译
发布评论