[lutte contre l'escalade] Netease a la traduction taoïste (traduction en ligne multilingue gratuite et instantanée)

Zsyl 2021-08-19 22:24:22 阅读数:461

lutte contre escalade netease la

Préface

PythonEn cours de développement,Toujours rencontrer le mot non,Ce n'est pas mal d'avoir une traduction,Goutte - à - goutte et j'ai raison Ta J'ai perdu la tête (* ̄︶ ̄)

Insérer la description de l'image ici

1. Page d'analyse

Lien de traductionNetease a un traducteur taoïste

  1. Appuyez d'abord surF12En mode développeur,EntréeNetwork,Effectuer la saisie des données.

  2. CopierUn mot.,Coller Entrez la boîte de requête ,Oui.Automatique Traduction , Observez les paquets qui arrivent .
    Insérer la description de l'image ici

  3. Ouvrez le premier paquet envoyé par le serveur , Obtenir les résultats de la traduction .

Insérer la description de l'image ici

  1. Alors j'ai copié ce qui suit post Contenu pertinent de la demande , Quand vous simulez à nouveau la demande ,Retourerror.

Insérer la description de l'image ici

Insérer la description de l'image ici

  1. Peut - être que le paramètre demande ,Oui.CryptageOu Paramètres partiels Chaque demande change .
  2. Deux demandes de remplacement consécutives , Comparer les changements de paramètres

Insérer la description de l'image ici

Insérer la description de l'image ici
Après comparaison ,Paramètressalt、sign、lts Si ça change vraiment !

  1. Globalsearch Ce paramètre , On peut trouver qu'il y a JS Appel de code :

Insérer la description de l'image ici
J'en ai marre des chats !

Insérer la description de l'image ici
Lecture approximative JSCode, Il y a les paramètres de requête que nous voulons !

C'est important d'analyser cette phrase !
r = v.generateSaltSign(n);

Insérer la description de l'image ici
Trouvez en haut r L'énoncé de production de :

Insérer la description de l'image ici

var n = e("./jquery-1.7");
e("./utils");
e("./md5");
var r = function(e) {

var t = n.md5(navigator.appVersion)
, r = "" + (new Date).getTime()
, i = r + parseInt(10 * Math.random(), 10);
return {

ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT")
}
};

C'est un peu notre paramètre !

C'est le paramètre de construction salt、sign、ltsCode.

2. PySimulationJSGénérer Form DataDonnées

Certains paramètres sont fixes , Donc la copie directe !

def generate_formdata(self):
""" ts: r = "" + (new Date).getTime(), salt: ts + parseInt(10 * Math.random(), 10);, sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT") """
ts = str(int(time.time()) * 1000)
salt = ts + str(random.randint(0, 9))
tempstr = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"
md5 = hashlib.md5()
md5.update(tempstr.encode())
sign = md5.hexdigest()
self.formdata = {

'i': self.word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': ts,
'bv': '7596b16d0589d68d2b53a8de445f5852',
'doctype': 'json',
'version': '2.1',
'keyfrom':' fanyi.web',
'action': 'FY_BY_REALTlME'
}

3. Demande&Analyser les données

def get_data(self):
response = requests.post(self.url, data=self.formdata, headers=self.headers)
return response.content
def parse_data(self, origin_data): # b'{"translateResult":[[{"tgt":"Life is short, carpe diem","src":"\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe5\x8f\x8a\xe6\x97\xb6\xe8\xa1\x8c\xe4\xb9\x90"}]],"errorCode":0,"type":"zh-CHS2en"}'
# TypeError: string indices must be integers, Donc chargé comme jsonObjet
# print(type(origin_data)) # <class 'str'>
data = json.loads(origin_data)
# print(type(data)) # <class 'dict'>
return '"{}" Le résultat est :{}'.format(data['translateResult'][0][0]['src'], data['translateResult'][0][0]['tgt'])

4. Code complet

import requests
import hashlib
import time
import random
import json
class Youdao(object):
def __init__(self, word):
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/93.0.4542.2 Safari/537.36',
'Cookie': '[email protected]; OUTFOX_SEARCH_USER_ID_NCOO=390856101.01363164; JSESSIONID=aaaWggQObiC9694v6tDTx; ___rl__test__cookies=1629358130539',
'Referer': 'https://fanyi.youdao.com/',
}
self.formdata = None
self.word = word
def generate_formdata(self):
""" ts: r = "" + (new Date).getTime(), salt: ts + parseInt(10 * Math.random(), 10);, sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT") """
ts = str(int(time.time()) * 1000)
salt = ts + str(random.randint(0, 9))
tempstr = "fanyideskweb" + self.word + salt + "Y2FYu%TNSbMCxc3t2u^XT"
md5 = hashlib.md5()
md5.update(tempstr.encode())
sign = md5.hexdigest()
self.formdata = {

'i': self.word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': ts,
'bv': '7596b16d0589d68d2b53a8de445f5852',
'doctype': 'json',
'version': '2.1',
'keyfrom':' fanyi.web',
'action': 'FY_BY_REALTlME'
}
def get_data(self):
response = requests.post(self.url, data=self.formdata, headers=self.headers)
return response.content
def parse_data(self, origin_data): # b'{"translateResult":[[{"tgt":"Life is short, carpe diem","src":"\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe5\x8f\x8a\xe6\x97\xb6\xe8\xa1\x8c\xe4\xb9\x90"}]],"errorCode":0,"type":"zh-CHS2en"}'
# TypeError: string indices must be integers, Donc chargé comme jsonObjet
# print(type(origin_data)) # <class 'str'>
data = json.loads(origin_data)
# print(type(data)) # <class 'dict'>
return '"{}" Le résultat est :{}'.format(data['translateResult'][0][0]['src'], data['translateResult'][0][0]['tgt'])
def run(self):
# url
# headers
# formdata
self.generate_formdata()
# Envoyer la demande, Obtenir une correspondance 
origin_data = self.get_data().decode() # Binaire byte Décodé comme utf-8
# Analyser les données
data = self.parse_data(origin_data)
print(data)
if __name__ == '__main__':
# AccèstranslationText
word = input(' Veuillez entrer ce que vous souhaitez traduire (Reconnaissance automatique du langage):')
# Créer un objet de traduction taoïste 
youdao = Youdao(word)
# Exécuter le Code de traduction 
youdao.run()

Attention! Besoin d'anti - crawler ,User-AgentPlusCookieEtReferer,C'est tout.!.

Insérer la description de l'image ici
On peut ajouter :while True, De cette façon, les mots qui ne le seront pas seront trouvés directement , Disponible dans toutes les langues AUTOTraduction.

Développement continu , Continuez à chercher des mots , Ça a été super !

Allez!

Merci beaucoup.!

Un effort.!

Copyright:Cet article est[Zsyl]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819222418540F.html