python 파충 류 는 어떻게 바 이 두 번역 을 실현 합 니까?
python 버 전 번호
계통
유람 기
python 3.7.2
win7
google chrome
본문 에 대하 여
본 고 는 파충류 의 방식 을 통 해 간단 한 바 이 두 번역 을 실현 할 것 이다.본 논문 의 코드 는 학습 만 제공 하고 비 즈 니스 역할 을 할 수 없습니다.비 즈 니스 역할 은 api.fanyi.baidu.com 에 가서 비용 을 지불 하 는 api 를 구 매 하 십시오.만약 침범 이 있 으 면 즉시 글 을 삭제 해라!
사고의 방향 을 실현 하 다.
사이트 파일 에서 숨겨 진 무료 api 를 찾 습 니 다.api 에 필요 한 인 자 를 입력 하고 요청 합 니 다.돌아 온 제 이 슨 결과 에서 해당 하 는 번역 결 과 를 찾 았 다.
바 이 두 번역 의 반 기어 오 르 기 메커니즘
token 암호
사이트 파일 에서 숨겨 진 무료 api 찾기
바 이 두 번역 에 들 어가 번역 해 야 할 문 자 를 마음대로 입력 하 세 요.번역 결과 가 나 왔 을 때 F12 를 누 르 고 NETWORK 를 선택 하고 마지막 으로 XHR 파일 을 누 르 십시오.이때 사이트 파일 을 모두 불 러 왔 기 때문에 F5 를 새로 고 쳐 야 합 니 다.
새로 고침 하면 v2transapi 를 발견 할 수 있 습 니 다.시작 하 는 파일 입 니 다.맞습니다.이것 이 바로 우리 가 찾 는 api 인터페이스 입 니 다.파일-preview 를 누 르 면 json 형식의 데이터 에서 번역 결 과 를 찾 아 검증 에 성공 할 수 있 습 니 다.
또한,우 리 는 우리 의 쿠키 와 token 을 가 져 와 야 합 니 다.그 후의 반 기어 오 르 기 체제 에서 우 리 는 그것들 을 사용 해 야 합 니 다.위 치 는 다음 과 같 습 니 다.
쿠키 위치:
token 위치:
api 정보
인터페이스:https://fanyi.baidu.com/v2tra..
요청 방식:post
요청 매개 변수 전체
매개 변수
소개 하 다.
from
원시 언어
to
목표 언어
query
번역 텍스트
sign
js 알고리즘 으로 생 성 된 서명(반전)
token
요청 암호
코드 쓰기 시작
request 와 execjs 라 이브 러 리 가 져 오기
import requests
import execjs
requests HTTP 라 이브 러 리,파충류 에 사용execjs 는 js 코드 를 호출 하 는 데 사 용 됩 니 다.반 파충류
바 이 두 번역 은 쿠키 식별 반 기어 오 르 기 메커니즘 이 있 기 때문에 우 리 는 우리 가 방금 얻 은 쿠키 를 설정 하여 네트워크 거미 의 신분 을 엄호 합 니 다.
headers = {'cookie':' cookie'}
그리고 token(암호)을 설정 해 야 합 니 다.
token = ' token'
마지막 으로 sign 반전 메커니즘 만 남 았 습 니 다.sign 은 js 알고리즘 이 번역문 에 생 성 된 서명 입 니 다.제 가 인터넷 에서 검색 해 봤 는데 해당 하 는 js 알고리즘 을 찾 아서 여러분 께 공유 해 드 렸 습 니 다.
var i = "320305.131321201"
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
}
function e(r) {
var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
if (null === o) {
var t = r.length;
t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
} else {
for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]);
var g = f.length;
g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
}
var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
u = null !== i ? i : (i = window[l] || "") || "";
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)
}
잠깐 만,우리 python 으로 파충류 하 는 거 아니 야?그럼 우 리 는 js 코드 도 모 르 는데 어떻게 호출 합 니까?다행히 python 은 강력 한 제3자 라 이브 러 리 를 가지 고 있 습 니 다.물론 js 코드 를 호출 하 는 라 이브 러 리 도 빠 질 수 없습니다.js 코드 를 호출 하 는 라 이브 러 리 가 많 지만 저 는 execjs 를 사용 하 는 것 을 추천 합 니 다.간단 하고 기능 이 완전 합 니 다.
js 알고리즘 코드 를 호출 하기 전에 우 리 는 사용자 에 게 번역문 을 입력 하 게 해 야 한다.
q = input(' :')
그 후에 우 리 는 execjs 의 copile 과 call 방법 으로 sign 을 얻 을 수 있 습 니 다.
js = '''var i = "320305.131321201"
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
}
function e(r) {
var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
if (null === o) {
var t = r.length;
t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
} else {
for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]);
var g = f.length;
g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
}
var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
u = null !== i ? i : (i = window[l] || "") || "";
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(js).call("e",q)
(위 코드 에서 sign 를 가 져 왔 습 니 다)일련의 반 파충류 준 비 를 통 해 우 리 는'원 언어'와'목표 언어'의 마지막 두 가지 인 자 를 설정 할 수 있다.
From = 'en'
To = 'zh'
(상기 코드 는 영문 번역 을 대표 합 니 다.다른 언어 로 번역 하려 면 언어 에 대응 하 는 영문 줄 임 말 을 입력 하 십시오.영문 줄 임 말 대응 표 는 본문 마지막 에 놓 입 니 다)이어서 우 리 는 인자 제 이 슨 을 구축 할 수 있다.
data = {'from':From,
'to':To,
'query':q,
'sign':sign,
'token':'14b5f31e3c65d89a0b1c3f756e53942e'}
마지막 으로 우 리 는 데 이 터 를 요청 하고 인쇄 할 수 있다.
text = requests.post(url,headers=headers,data=data).json()
print(text)
우 리 는 인쇄 된 결과 가 json 사전 이라는 것 을 발 견 했 습 니 다.번역 결 과 는 바로 그 안에 있 습 니 다.우 리 는 결 과 를 번역 해 야 하기 때문에 우 리 는 번역 결과 의 위 치 를 색인 하여 다시 인쇄 할 수 있 습 니 다.
text = requests.post(url,headers=headers,data=data).json()['trans_result']['data'][0]['dst']
print(text)
실행 결과:전체 코드:
import requests
import execjs
url = 'https://fanyi.baidu.com/v2transapi'
headers = {'cookie':' cookie'}
js = '''var i = "320305.131321201"
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
}
function e(r) {
var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
if (null === o) {
var t = r.length;
t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
} else {
for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]);
var g = f.length;
g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
}
var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
u = null !== i ? i : (i = window[l] || "") || "";
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)
}
'''
From = ' '
To = ' '
token = ' token'
q = input(' :')
sign = execjs.compile(js).call("e",q)
data = {'from':From,
'to':To,
'query':q,
'sign':sign,
'token':token}
text = requests.post(url,headers=headers,data=data).json()['trans_result']['data'][0]['dst']
print(text)
언어 영문 약어 대응 표
{
'zh': ' ','jp': ' ','jpka': ' ','th': ' ','fra': ' ','en': ' ','spa': ' ','kor': ' ','tr': ' ','vie': ' ','ms': ' ','de': ' ','ru': ' ','ir': ' ','ara': ' ','est': ' ','be': ' ','bul': ' ','hi': ' ','is': ' ','pl': ' ','fa': ' ','dan': ' ','tl': ' ','fin': ' ','nl': ' ','ca': ' ','cs': ' ','hr': ' ','lv': ' ','lt': ' ','rom': ' ','af': ' ','no': ' ','pt_BR': ' ','pt': ' ','swe': ' ','sr': ' ','eo': ' ','sk': ' ','slo': ' ','sw': ' ','uk': ' ','iw': ' ','el': ' ','hu': ' ','hy': ' ','it': ' ','id': ' ','sq': ' ','am': ' ','as': ' ','az': ' ','eu': ' ','bn': ' ','bs': ' ','gl': ' ','ka': ' ','gu': ' ','ha': ' ','ig': ' ','iu': ' ','ga': ' ','zu': ' ','kn': ' ','kk': ' ','ky': ' ','lb': ' ','mk': ' ','mt': ' ','mi': ' ','mr': ' ','ne': ' ','or': ' ','pa': ' ','qu': ' ','tn': ' ','si': ' ','ta': ' ','tt': ' ','te': ' ','ur': ' ','uz': ' ','cy': ' ','yo': ' ','yue': ' ','wyw': ' ','cht': ' ' }
이상 은 python 파충류 가 바 이 두 번역 을 어떻게 실현 하 는 지 에 대한 상세 한 내용 입 니 다.python 파충류 가 바 이 두 번역 을 실현 하 는 데 관 한 자 료 는 우리 의 다른 관련 글 에 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.