Python爬虫之实现百度翻译

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

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

Python爬虫之实现百度翻译_第1张图片

Python爬虫之实现百度翻译_第2张图片

Python爬虫之实现百度翻译_第3张图片

 

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

Python爬虫之实现百度翻译_第4张图片

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

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

Python爬虫之实现百度翻译_第5张图片

Python爬虫之实现百度翻译_第6张图片

 

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

Python爬虫之实现百度翻译_第7张图片

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

查看返回的json数据

Python爬虫之实现百度翻译_第8张图片

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

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

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

Python爬虫之实现百度翻译_第9张图片

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

最后附上源码:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import requests
import json

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"}
post_langdetect_url = 'https://fanyi.baidu.com/langdetect'  # 用于判断翻译类型的请求url
post_basetrans_url = 'https://fanyi.baidu.com/basetrans'  # 用于得到翻译结果的请求url

input_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)

运行截图:

Python爬虫之实现百度翻译_第10张图片

使用面向对象:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import requests
import json
import sys


class BaiduFanyi:
    def __init__(self, trans_str):
        self.trans_str = trans_str
        self.lang_detect_url = "https://fanyi.baidu.com/langdetect"
        self.trans_url = "https://fanyi.baidu.com/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模块,翻译时加引号~)

Python爬虫之实现百度翻译_第11张图片

 

你可能感兴趣的:(编程,python)