百度翻译接口获取过程

2023-11-20

记百度翻译接口获取过程

思路:进入到百度翻译(https://fanyi.baidu.com/),首先要找到返回数据的接口:

  1. 打开f12,输入你要翻译的内容后能看到很多请求如图所示;
    在这里插入图片描述
  2. 进入到XHR查看请求的信息(现在一般都是json返回数据);
    在这里插入图片描述
  3. 这里推荐一个网站(https://www.json.cn/)专门解析json字符串,将response中返回的数据丢到这个网站上去解析,解析结果如下;
    在这里插入图片描述
  4. 这里其实就能够看到这是我们要找的接口

思路:既然接口找到了,开始模拟浏览器发送请求。发送请求的数据是什么,请求头会不会有要求?这些都需要去考虑,去找规律:
在这个截图里面找接口、请求方式等
请求接口:https://fanyi.baidu.com/v2transapi
请求方式:POST
请求参数:
from: zh
to: en
query: 喜欢
transtype: translang
simple_means_flag: 3
sign: 64916.269989
token: e3f945758e2f3ef4e897e4bcd6f653db

思路:发现不带header会出问题,最终会发现其实header里面只有Cookie发挥了作用,所以同样在headers里面把request header:
主要拿这里面的cookie
思路:经过对比翻译不同的东西发现请求参数的sign根据不同的翻译内容改变,所以接下来的目标就是找sign的规律。这段规律是通过找博客直接dowm下来用的参考(https://blog.csdn.net/z434890/article/details/85008821),具体怎么去搞定sign,我也得好好研究一下。po出最终的代码:

-- coding: utf-8 --

!/usr/bin/env python

import json
import requests
import execjs

class BaiDuTranslate():
def init(self):
self.base_url = ‘https://fanyi.baidu.com/v2transapi
self.word = input(“请输入要翻译的单词:”)

def send_request(self, params, header):
    """
    发送请求
    :param params: data参数
    :param header: 请求头
    :return:
    """
    response = requests.post(url=self.base_url, headers=header, data=params).content.decode()
    results = json.loads(response)
    result = results["trans_result"]["data"][0]["result"][0][1] #解析返回的json获取返回值
    return result

def parse_sign(self):
    """
    # https://blog.csdn.net/z434890/article/details/85008821 查找资料得到sign值
    :return: sign值
    """
    jsCode = """
        function a(r) {
            if (Array.isArray(r)) {
                for (var o = 0, t = Array(r.length); o < r.length; o++)
                    t[o] = r[o];
                return t
            }
            return Array.from(r)
        }
        function n(r, o) {
            for (var t = 0; t < o.length - 2; t += 3) {
                var a = o.charAt(t + 2);
                a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a),
                a = "+" === o.charAt(t + 1) ? r >>> a : r << a,
                r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a
            }
            return r
        }
        var i = null;
        function e(r) {
            var t = r.length;
            t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))

            var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);

            u = null !== i ? i : (i = '320305.131321201' || "") || "";
            for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
                var A = r.charCodeAt(v);
                128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)),
                S[c++] = A >> 18 | 240,
                S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224,
                S[c++] = A >> 6 & 63 | 128),
                S[c++] = 63 & A | 128)
            }
            for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++)
                p += S[b],
                p = n(p, F);
            return p = n(p, D),
            p ^= s,
            0 > p && (p = (2147483647 & p) + 2147483648),
            p %= 1e6,
            p.toString() + "." + (p ^ m)
        }
    """
    sign = execjs.compile(jsCode).call("e", self.word)
    return sign

def main(self):
    sign = self.parse_sign() # 获取解析后的sign
    params = {"from": "zh",
              "to": "en",
              "query": self.word,
              "transtype": "translang",
              "simple_means_flag": "3",
              "sign": sign,  # 问题1:不同的搜索关键字值不一样,找出sign的处理方式
              "token": "7c7080081fc1d32690394ea107924e0a"} # post请求参数
    headers = {
        # "Accept": "*/*",
        # "Accept-Encoding": "gzip,deflate,br",
        # "Accept-Language": "zh-CN,zh;q=0.9",
        # "Connection": "keep-alive",
        # "Content-Length": "136",
        # "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Cookie": "BAIDUID=6ACF9C6D814D61BB34FF9B6E42C4FDE0:FG=1; BIDUPSID=6ACF9C6D814D61BB34FF9B6E42C4FDE0; PSTM=1557366108; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=26522_1428_21078_28519_28772_28721_28964_28835_28585_28604_22157; delPer=0; PSINO=2; ZD_ENTRY=baidu; locale=zh; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1557452953; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1557453216; to_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D; from_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D",
        # "Host": "fanyi.baidu.com",
        # "Origin": "https://fanyi.baidu.com",
        # "Referer": "https://fanyi.baidu.com/",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
        # "X-Requested-With": "XMLHttpRequest"
    } # 请求头
    result = self.send_request(params, headers)
    print(result)

if name == ‘main’:
while True:
translate = BaiDuTranslate()
translate.main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度翻译接口获取过程 的相关文章

随机推荐

  • jmeter3.3调用数据库写存储过程注意点

    1 数据库配置页面 2 创建存储过程要保证库里没有同名 本来这句drop语句放在创建存储过程里面的 发现会导致不会执行存储过程 一定要分开写 query type选择 update statement 3 创建存储过程 variable n
  • 5-6)视图与索引

    文章目录 视图 一 视图概述 1 视图的定义 2 视图的分类 3 视图的优缺 二 创建视图 使用T SQL 语句创建视图 创建视图注意的问题 三 使用视图 视图 视图是一种虚拟的数据表 Virtual table 来源于数据表和其他数据 一
  • 实验一:交换机的配置与管理-计算机网络

    交换机的配置与管理 技术原理 交换机的管理方式基本分为两种 带内管理和带外管理 通过交换机的Console端口管理交换机属于带外管理 这种管理方式不占用交换机的网络端口 第一次配置交换机必须利用Console端口进行配置 交换机的命令行操作
  • Python爬虫学习之数据提取(XPath)

    Python爬虫学习之数据提取XPath 概述 常用规则 运算符及介绍 准备工作 实例 文本获取 属性获取 属性值匹配 属性多值匹配 多属性匹配 按序选择 概述 XPath的全称是XML Path Language 即XML路径语言 用来在
  • url参数加密_百度逆推link?url=xxx加密算法“反推技术秒收"

    熟悉百度的站长都知道 凡是被百度搜索引擎收录的网站链接 都会生成一个以baidu开头的多参数跳转链接 而所谓 百度反推技术 的原理就是把百度生成的这个链接地址换成自己想要被收录的页面链接就可以了 然后再进行百度快照的投诉 就可以达到秒来蜘蛛
  • SQL:exec sp_executesql 用法

    這種是無效的過程 declare sql nvarchar 500 where nvarchar 500 i nvarchar 64 p nvarchar 50 id int set id 5 set sql select p AreaCo
  • 机器学习系列(8):人脸识别基本原理及Python实现

    众所周知 人脸识别和人脸验证已经得到大量应用 那么它们之间有什么异同呢 又是如何实现的呢 这里是机器学习系列第八篇 带你揭开它们神秘的面纱 若图片挂了 可移步 https mp weixin qq com s biz MzU4NTY1NDM
  • STC仿真失败

    原因就是购买的下载工具不适合在烧写STC8H3K64S仿真固件后再将该下载工具作为USB转串口工具连接PC与目标板 推测是接入仿真时会重启目标板 不打算细究 换一个普通串口就好了
  • VS编译.cu文件源文件无法打开matrix.h和mex.h问题

    配置好cu和VS相关库文件后CUDA程序仍然报错 无法打开matrix h和mex h 解决办法 1 这两个头文件是matlab中的 可能无法直接在VS中调用 可以通过添加外部依赖项的方法将matlab中的头文件的文件路径添加进来 VS中按
  • 机器学习:聚类算法API初步使用

    学习目标 知道聚类算法API的使用 1 api介绍 sklearn cluster KMeans n clusters 8 参数 n clusters 开始的聚类中心数量 整型 缺省值 8 生成的聚类数 即产生的质心 centroids 数
  • SQL批量处理+JDBC操作大数据及工具类的封装

    SQL批量处理 JDBC操作大数据及工具类的封装 一 批处理 批量处理sql语句 在jdbc的url中添加rewriteBatchedStatements true参数 可以提高批处理执行效率 在我们进行大批量数据操作的时候 需要采用批处理
  • 不使用80,443,端口,域名还需要备案吗?域名没有备案应该怎么选服务器。

    在互联网日益发达的今天 越来越多的个人 企业 公司涌入其中 在服务器 域名 大量供需的情况下身为一个小白应该要注意什么呢 首先要明确你所需要的服务器是国内大陆服务器 如 杭州 扬州 镇江 宁波等 还是海外服务器 如 香港 美国 日本 韩国等
  • uniapp写h5如何封装一个图片上传预览并且有进度条的组件

    开发背景 首先项目是用uniapp写的h5项目 要求能上传 预览 和进度条展示 还要求总览的时候用缩略图 点开预览要原图 不得不吐槽一下 开发环境 uniapp 阿里云存储 先看截图效果 好了直接上代码 photo picker vue
  • Python基础知识点梳理

    本文简要梳理了Python基础知识的大体框架 目录 一 变量和赋值 二 分支和循环 1 分支结构 2 循环结构 三 数据结构 四 函数 lambda函数 匿名函数 五 面向对象 1 封装 2 继承 六 模块和包 一 变量和赋值 变量是编程语
  • Python 基于 opencv 车牌识别系统的研究与实现

    源码下载地址 https download csdn net download gdutxiaoxu 87419195 原理简介 车牌字符识别使用的算法是opencv的SVM opencv的SVM使用代码来自于opencv附带的sample
  • 数据湖--概念、特征、架构与案例概述

    一 什么是数据湖 数据湖是目前比较热的一个概念 许多企业都在构建或者计划构建自己的数据湖 但是在计划构建数据湖之前 搞清楚什么是数据湖 明确一个数据湖项目的基本组成 进而设计数据湖的基本架构 对于数据湖的构建至关重要 关于什么是数据湖 有如
  • 上传图片到七牛云

    public JSONObject uploadImgToQiniu RequestParam MultipartFile file HttpServletResponse response HttpServletRequest reque
  • 论文笔记: Masked Autoencoders Are Scalable Vision Learners

    1 整体思路 效仿BERT中MLM的思路 随机mask掉输入图像的部分patch 并重建这些被mask掉的patch 机器学习笔记 ELMO BERT UQI LIUWJ的博客 CSDN博客 模型结构是一个非对称的encoder decod
  • 生命在于折腾——SQL注入的实操(五)less21-25

    一 实操环境 1 操作系统 VMware虚拟机创建的win10系统 内存8GB 硬盘255GB 处理器AMD Ryzen 9 5900HX 2 操作项目 sql lib项目 本篇文章介绍关卡21 25 3 工具版本 phpstudy 8 1
  • 百度翻译接口获取过程

    记百度翻译接口获取过程 coding utf 8 usr bin env python 思路 进入到百度翻译 https fanyi baidu com 首先要找到返回数据的接口 打开f12 输入你要翻译的内容后能看到很多请求如图所示 进入