1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python爬虫之实现百度翻译

Python爬虫之实现百度翻译

时间:2022-05-04 07:56:54

相关推荐

Python爬虫之实现百度翻译

本文用python3实现模拟调用百度翻译api接口,实现翻译(练习requests库之post请求)。

首先点击翻译,查看请求包,响应包。

我们在v2transapi请求链接的响应包json数据中发现我们需要的返回值,然后查看发送的POST数据

经分析,from:en to:zh 代表英文翻译成中文,query为翻译内容 sign的值和需要翻译的内容有关系。其他值可默认不变

sign值不确定,我们猜测可能由JS或其他内容生成。我们这里转换思路,模拟手机点击翻译查看请求包:

我们在basetrans请求链接的响应包json中发现我们需要的返回值,查看发送的POST数据

只存在query: from: to: 所以我们直接构造手机端翻译来实现百度翻译api接口即可

查看返回的json数据

basetrans_dict["trans"][0]["dst"]即可得到其值

然后我们继续优化 实现自动识别输入内容的语言类型,进行翻译。

我们发现 langdetect请求链接返回的json数据中 lan:对应的值就是需要翻译的类型

langdetect_dict["lan"]即可得到其值

最后附上源码:

#!/usr/bin/env python# _*_ coding:utf-8 _*_import requestsimport jsonheaders = { # 请求头"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36"}post_langdetect_url = '/langdetect' # 用于判断翻译类型的请求urlpost_basetrans_url = '/basetrans' # 用于得到翻译结果的请求urlinput_word = input("请输入需要翻译的内容:")langdetect_data = {"query": input_word}post_langdetect_resp = requests.post(post_langdetect_url, data=langdetect_data, headers=headers)langdetect_dict = json.loads(post_langdetect_resp.content.decode())langdetect = langdetect_dict["lan"]# print(langdetect)if langdetect == "en":langtransto = "zh"else:langtransto = "en"basetrans_data = {"query": input_word,"from": langdetect,"to": langtransto,}post_basetrans_resp = requests.post(post_basetrans_url, data=basetrans_data, headers=headers)# print(r.content.decode())basetrans_dict = json.loads(post_basetrans_resp.content.decode())result = basetrans_dict["trans"][0]["dst"]print("翻译结果为:", result)

运行截图:

使用面向对象:

#!/usr/bin/env python# _*_ coding:utf-8 _*_import requestsimport jsonimport sysclass BaiduFanyi:def __init__(self, trans_str):self.trans_str = trans_strself.lang_detect_url = "/langdetect"self.trans_url = "/basetrans"self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36"}def parse_url(self, url, data): # 发送post请求,获取响应response = requests.post(url, data=data, headers=self.headers)return json.loads(response.content.decode())def get_ret(self, dict_response): # 提取翻译结果ret = dict_response["trans"][0]["dst"]print("翻译结果为:", ret)def run(self): # 实现主要逻辑# 1.获取语言类型lang_detect_data = {"query": self.trans_str}# 2.准备post数据lang = self.parse_url(self.lang_detect_url, lang_detect_data)["lan"]trans_data = {"query": self.trans_str, "from": "zh", "to": "en"} if lang == "zh" else \{"query": self.trans_str, "from": "en", "to": "zh"}# 3.发送post请求,获取响应dict_response = self.parse_url(self.trans_url, trans_data)# 4.提取翻译结果self.get_ret(dict_response)if __name__ == '__main__':trans_str = sys.argv[1]baidu_fanyi = BaiduFanyi(trans_str)baidu_fanyi.run()

运行截图:(使用sys模块,翻译时加引号~)

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