没有细胞的人 发表于 2021-10-18 18:47

Python-有道翻译(自动检测语言)模块-js解析

本帖最后由 没有细胞的人 于 2021-10-18 20:11 编辑


今天学了网络爬虫,稍稍了解了一下下网络爬虫,新手小白试着自己写了个有道翻译的模块
翻译自动检测语言,但由于有道限制,只能翻译5000字以内,否则会返回error
方法是解析js。调用方法是面向对象的类,而不是用函数直接调用
直接复制粘贴或者下载附件就可以用了,应该有一点python基础的人都会知道如何使用的吧,应该吧,应该吧()
(文中//filename:表示该段代码文件在附件中的名称)
用了以下模块(//filename:youdaofanyi.py)
import requests
import time
import random
import hashlib
import json

应该除了requests模块都已经安装好了趴
安装requests模块代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests


模块代码
import requests
import time
import random
import hashlib
import json


class YouDao:
    def __init__(self, word):
      self.word = word
      self.formdata = None
      self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
      self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50',
            'Referer': 'https://fanyi.youdao.com/',
            'cookie': '_ntes_nnid=b2bd3183b80a536b5e23a0517a0dbe09,1609301940731; OUTFOX_SEARCH_USER_ID_NCOO=96820041.49293956; OUTFOX_SEARCH_USER_ID="787599989@10.169.0.84"; JSESSIONID=aaa5u4ALZhnHhcfnoUsYx; ___rl__test__cookies=1634549585488'
      }

    def translation(self):
      self.config()
      response = requests.post(self.url, self.formdata, headers=self.headers)
      response.encoding = 'utf-8'
      try:
            data = json.loads(response.text)
            rdata = data['translateResult']['tgt']
      except:
            rdata = 'error'
      return rdata

    def config(self):
      '''
      用于配置发送数据formdata
      '''

      ts = str(int(time.time() * 1000))
      i = ts + str(random.randint(0, 9))
      salt = i
      str_ = 'fanyideskweb' + self.word + i + "Y2FYu%TNSbMCxc3t2u^XT"
      md5 = hashlib.md5()
      md5.update(str_.encode('utf-8'))
      sign = md5.hexdigest()
      self.formdata = {
            'i': self.word,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': salt,
            'sign': sign,
            'lts': ts,
            'bv': '8f307b78e0cf5a0a41f77f2f8d464fe3',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME'
      }


if __name__ == '__main__':
    word = input('请输入要翻译的内容:')
    youdao = YouDao(word)
    print(youdao.translation())



调用demo代码(//demo.py)
import youdaofanyi

sentences = input('请输入要翻译的内容(5000字以内容,自动检测语言):')
youdao = youdaofanyi.YouDao(sentences)
print(youdao.translation())


附代码文件:

风逝998 发表于 2021-10-18 19:26

感放楼主分享

muyu1314520 发表于 2021-10-18 20:01

感放楼主分享

ok667 发表于 2021-10-18 21:22

谢谢楼主

C哥888 发表于 2021-10-19 01:57

感谢楼主分享,翻译字数太少了

YeLTYZ 发表于 2021-10-19 08:48

感谢分享

hedefu 发表于 2021-10-19 08:54

感放楼主分享

一个辣鸡 发表于 2021-10-19 09:25

这个我初学时也做过,搞一个while(True)让程序能一直使用更方便些

没有细胞的人 发表于 2021-10-19 12:25

C哥888 发表于 2021-10-19 01:57
感谢楼主分享,翻译字数太少了

可以加一个检测,超过字数的话可以试试分段翻译
页: [1]
查看完整版本: Python-有道翻译(自动检测语言)模块-js解析