原来python还能翻译有道翻译

144 阅读3分钟

原来python还能翻译某道翻译

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

爬取网站四部曲

分析

当我们进入某道翻译的官网时 在这里插入图片描述

先打开控制台,第一时间查看请求,先判断我们需要的数据是通过Fetch/XHR还是文档直接生成的,通过这样去判断我们写脚本的方式是直接通过获取数据还是用xml去定位数据并获取 在这里插入图片描述

因为我们还没使用输入任何东西,不过读者可自行看看,这里主要是为了查看当我们输入后会有什么变化 在这里插入图片描述

分析重点请求出现的问题

首先我们先看看我们请求体有哪些给后台 在这里插入图片描述 我们从上图可以看到 Get

  • smartresult (结果返回方式)
  • smartresult (不知道) Post
  • i(我们输入的)
  • from(需要转换的语言)
  • to(将要转成的语言)
  • smartresult(结果返回方式)
  • client(客户端类型)
  • salt(未知)
  • sign(未知)
  • lts(未知)
  • bv(未知)
  • doctype(文档类型)
  • version(版本号)
  • keyfrom(请求地址)
  • action(操作方式) 这里有几个不知道是什么可以我们可以多测试几个来判断有没有固定的字段 在这里插入图片描述 这里我们可以看到除了红圈发生了变化,其他基本上没有发生变化,所以上面那些则是我们需要解决的问题

解决问题

首页我们知道整个翻译过程是ajax实现的,所以我们可以进行调试js代码来判断参数是如何生成的

js代码调试

在这里插入图片描述

然后正常的输入我们要翻译的内容 在这里插入图片描述 很多人可能会出现和我上面这个情况一样,js代码基本上全部在一起,很难看不好分析 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 发现重要信息后,我们就要去看这些数据是那些变量赋值的,怎么来的,慢慢去追溯 在这里插入图片描述 可以看出我们需要获取的数据都是r这个变量,所以我们要追随到r是怎么获取到的** 在这里插入图片描述 在这里插入图片描述 大致都了解了就可以开始写代码了

import hashlib
import requests

if __name__ == '__main__':
    appVersion = "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42"
    headers = {
        'User-Agent': "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42",
        "x-requested-with": "XMLHttpRequest",
        "origin": "https://fanyi.youdao.com",
        "referer": "https://fanyi.youdao.com/",
        "Cookie": "OUTFOX_SEARCH_USER_ID=1416423765@10.112.57.88; OUTFOX_SEARCH_USER_ID_NCOO=901309710.0569204; ___rl__test__cookies=1663754125840"
    }
    text = """
    软件学堂 :http://www.xue51.com/

软件学堂为你提供最安全的PC软件下载和免费的Mac软件下载,还有单机游戏,手机游戏,手机应用软件下载,同时收集整理了各类软件使用教程、最新游戏攻略、游戏地图及游戏辅助工具供用户下载。 

百度一下“软件学堂”,惊喜等着您哦!

    """

    bv = hashlib.md5(appVersion.encode()).hexdigest()
    ts="1663754314152"
    salt="16637543141524"
    s="fanyideskweb" + text + salt + "Ygy_4c=r#e#4EX^NUGUc5"
    sign=hashlib.md5(s.encode()).hexdigest()
    data = {
        "from": "auto",
        "to": "auto",
        "i": text,
        "smartresult": "dict",
        "fr": "browser_pc",
        "client": "fanyideskweb",
        "salt": salt,
        "sign": sign,
        "lts": ts,
        "bv": bv,
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "action": "FY_BY_CLICKBUTTION",
    }
    url="https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    content = requests.post(url, headers=headers, data=data).json()
    translateResultStr=""
    for value in content['translateResult']:
        for v in value:
            translateResultStr+=v['tgt']
        translateResultStr+='\n'
    print("原文:")
    print(text)
    print("翻译结果:")
    print(translateResultStr)

在这里插入图片描述


    关注微信公众号【爱上开源】,该公众号会为你提供作者在网上找到有趣的开源项目,会将使用过程写成文章呈现给读者.公众号还提供爬虫和部分计算机资源给读者.如果读者想要什么资源可以私信给我,作者会尽力查询(不要涉嫌违法资源即可)