程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

【Python应用】爬取有道翻译API,自制翻译工具(Python爬虫)

发布于2020-03-10 20:05     阅读(1870)     评论(0)     点赞(4)     收藏(4)


有道翻译官网:http://fanyi.youdao.com/

  • 分析网站

打开网页,F12找到translate这个XHR文件中存在主要信息,找到最后的From Data(数据的来源,如何获取的,最后调用翻译)
在这里插入图片描述

对于这两组数据,不知道是什么?(虽然bv也不知道是什么,不过好像对项目没有直接的影响)看到sign可能是一个十六进制的数据,通过找到fanyi.min.js(别问我怎么知道是这个文件,一个个JS文件打开来自己慢慢看,有没有自己想要的)
在这里插入图片描述

将JS文件用在线json网站:https://www.json.cn/解析出来,搜索salt,找到

salt:I,sign:n.md5(“fanyideskweb"+e+i+"n%A-rKaT5fb[Gy?;N5@Tj” ”)
n%A-rKaT5fb[Gy?;N5@Tj

这个是有道翻译内部的识别码,也无需破解,直接模仿浏览器访问就好

在这里插入图片描述
使用print(res.json())获取到网页返回的json值,我们需要的数据在translateResult这个字典的键值对中的‘tgt’里,然而这个是有三层的,所以前面保存空位,用[0][0]存空位,最后打印出来。

print(res.json()['translateResult'][0][0]['tgt'])

在这里插入图片描述
salt和ts只是后面一个数字不同,而ts是时间,和time.time()*1000返回的值一直,所以salt是时间加上一个随机数。
fanyi.min.js文件中搜索salt可知
在这里插入图片描述
http://shared.ydstatic.com/fanyi/newweb/v1.0.22/scripts/newweb/fanyi.min.js

全部代码如下:

import requests

def get_salt():
    import time
    import random
    salt = int(time.time()) * 1000 + random.randint(0, 9)
    return salt


def get_sign(key, salt):
    import hashlib
    md5 = hashlib.md5()
    str1 = "fanyideskweb" + key + str(salt) + "n%A-rKaT5fb[Gy?;N5@Tj"
    md5.update(str1.encode())
    return md5.hexdigest()


def fanyi(key):
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    salt = get_salt()
    data = {
        'i': str(str1),#用户输入的查询数据
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': get_salt(),
        'sign': get_sign(key, salt),
        'bv': 'b396e111b686137a6ec711ea651ad37c',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME',
    }
    headers = {
        'Accept': 'application / json, text / javascript, * / *; q = 0.01',
        'Accept - Encoding': 'gzip, deflate',
        'Accept - Language': 'zh - CN, zh;q =0.9',
        'Connection': 'keep - alive',
        'Content - Length': str(len(data)),#文本长度
        'Content - Type': 'application / x - www - form - urlencoded;charset = UTF - 8',
        'Cookie': 'OUTFOX_SEARCH_USER_ID = 1005740237 @ 10.108.160.19;OUTFOX_SEARCH_USER_ID_NCOO = 1384111467.600651;\
                JSESSIONID = aaam2Y9bDM - LJ61vp9D7w;___rl__test__cookies = 1575686365619',
        'Host': 'fanyi.youdao.com',
        'Origin': 'http: // fanyi.youdao.com',
        'Referer': 'http: // fanyi.youdao.com /',
        'User - Agent': 'Mozilla / 5.0(WindowsNT10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko)\
                Chrome / 75.0.3770.100Safari / 537.36,X - Requested - With: XMLHttpRequest',
    }
    res = requests.post(url=url, headers=headers, data=data)
    print(res.json()['translateResult'][0][0]['tgt'])

if __name__ == '__main__':
    str1 = input("请输入需要翻译的内容:")
    fanyi(str1)

原文链接:https://blog.csdn.net/JeeCai/article/details/104751902



所属网站分类: 技术文章 > 博客

作者:我是小白兔

链接:https://www.pythonheidong.com/blog/article/251428/bd110a679cfd22d9db1c/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)