1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python爬虫之使用urllib模块实现有道翻译功能

python爬虫之使用urllib模块实现有道翻译功能

时间:2021-09-02 21:07:48

相关推荐

python爬虫之使用urllib模块实现有道翻译功能

本文可参考:

python 爬虫之urllib库

json

目标:

用python的urllib库实现有道翻译

导入需要的库,设置交互进行交互

import urllib.requestimport urllib.parseimport json# 请输入你要翻译的内容key = input('请输入您要翻译的内容:')

分析网页,由于网页为动态网页所以从Network中寻找,找出结果如下:

于是确定好data

# 把提交的form表单的数据转换为bytes类型的数据data = {'i': key,'from': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '15880623642174','sign': 'c6c2e897040e6cbde00cd04589e71d4e','ts': '1588062364217','bv': '42160534cfa82a6884077598362bbc9d','doctype': 'json','version': '2.1','keyfrom':'fanyi.web','action': 'FY_BY_CLICKBUTTION'}data = urllib.parse.urlencode(data)# 把data转换成自己data = bytes(data,'utf-8')

开始请求网页,这里去掉_o博主也不知道为什么,反正留着会出错,去了就没事了

# 发请求获取响应 注意 需要去掉_ourl = '/translate?smartresult=dict&smartresult=rule'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}req = urllib.request.Request(url,data=data,headers=headers)res = urllib.request.urlopen(req)html = res.read().decode('utf-8')

到这一步基本上完成了,但是如果直接打印html

是以下这种结果

请输入您要翻译的内容:age{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"age","tgt":"年龄"}]]}

因为这是json类型的字符串,json可参考/xdc1812547560/article/details/108031296

然后把json类型的字符串转换为字典

r_dict = json.loads(html)

但是直接打印结果依然不尽人意

{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"name","tgt":"的名字"}]]}

所以然后再层层细化

r = r_dict['translateResult'] # [[{"src":"name","tgt":"的名字"}]]result = r[0][0]['tgt'] # [{"src":"name","tgt":"的名字"}] -->{"src":"name","tgt":"的名字"}print(result)

就算可以了

请输入您要翻译的内容:age年龄

最终完整代码

import urllib.requestimport urllib.parseimport json# 请输入你要翻译的内容key = input('请输入您要翻译的内容:')# 把提交的form表单的数据转换为bytes类型的数据data = {'i': key,'from': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '15880623642174','sign': 'c6c2e897040e6cbde00cd04589e71d4e','ts': '1588062364217','bv': '42160534cfa82a6884077598362bbc9d','doctype': 'json','version': '2.1','keyfrom':'fanyi.web','action': 'FY_BY_CLICKBUTTION'}data = urllib.parse.urlencode(data)# 把data转换成自己data = bytes(data,'utf-8')# 发请求获取响应 注意 需要去掉_ourl = '/translate?smartresult=dict&smartresult=rule'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}req = urllib.request.Request(url,data=data,headers=headers)res = urllib.request.urlopen(req)html = res.read().decode('utf-8')# 把json类型的字符串转换为字典r_dict = json.loads(html)# {"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"name","tgt":"的名字"}]]}r = r_dict['translateResult'] # [[{"src":"name","tgt":"的名字"}]]result = r[0][0]['tgt'] # [{"src":"name","tgt":"的名字"}] -->{"src":"name","tgt":"的名字"}print(result)

效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。