1. 程式人生 > >Python 呼叫有道的翻譯介面

Python 呼叫有道的翻譯介面

最近為了熟悉一下 js 用有道翻譯練了一下手,寫一篇部落格記錄一下,也希望能對大家有所啟迪,不過這些網站更新太快,可能大家嘗試的時候會有所不同。

  • 首先來看一下網頁 post 過去的資料

    這裡寫圖片描述
    data
    大家不難發現,我們翻譯的內容是放在 post 的 data 中的,這些引數,除了 salt 和 sign 要麼就是不會變化,要麼就是一眼能看出來意義的;那麼這個 salt 和 sign 是什麼呢?salt 根據 ta 資料的特徵,我們應該會想到,這應該是一個時間戳,而 sign 又是什麼呢?我們一起來看一下

  • 找到這個 js 檔案,最上面這個 send 檔案
    這裡寫圖片描述

  • 將裡面的 js 程式碼拷貝出來,格式化一下,搜尋 sign
    這裡寫圖片描述


    我們發現,salt 確實是一個時間戳,但 sign 呢?,這裡對 sign 的計算稍微多囉嗦幾句,如圖:
    這裡寫圖片描述
    大家發現 sign 的值,也就是 o 一共是對四個引數進行求 md5 碼,兩個是定值,一個是前面求到的時間戳,還有一個是什麼呢?這個地方我也找了挺久的(還是不懂 js 的痛啊,哭。。。)剩下的引數,就是圖片中所謂的 t

    var t = e.i

    然後在 data 中,大家還能發現這麼一句:

    i:e.i

    這個 i 我們對應到 ta 傳送的 data 中,不就是我們要翻譯的字串嗎?哈哈哈,被我發現了吧!

  • 發現這個就好辦了,我們找出其中引數之間的關係,用Python實現 ta
    這裡寫圖片描述

  • 但當我們構造好 data 興高采烈地將資料 post 過去的時候,會發現出現報錯了
    這裡寫圖片描述

  • 為什麼呢?難道是我們的 data 構造的有問題嗎?不清楚,先嚐試一下,咱們吧瀏覽器中的 data 拷貝進來執行一下,發現還是出錯了;那麼說明錯誤不是出在 data 上面了,那究竟是那裡出了問題呢?難道 ta 還有其他的校驗方式;彆著急繼續分析,我們再觀察一下,post 請求,發現這個請求是帶了 cookie的,於是我們猜測,是不是 cookie 的原因呢? 還是不清楚,我們嘗試一下,將 data 對應的 cookie 加上,再執行一下。發現這次通過了,我們的猜測沒錯,確實是 cookie 的原因,那麼這個 cookie 又是怎麼來的呢?

  • Cookie
    這裡寫圖片描述
    多嘗試幾次,大家會發現,不同的請求內容,前面兩個是不會發生改變的,而第三個,結合我們之前的經驗,是不是很像一個時間戳;既然有猜測,咱們就又來嘗試一下,自己構造一個 Cookie post 過去,萬事大吉,哈哈哈哈。

  • 最後附上我的程式碼

#/usr/bin/python 
# encoding:utf-8
# __Author__ = Slwhy

import requests
import time
import random
import hashlib
#i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10))
i = str(int(time.time()*1000)+random.randint(1,10))
#o = n.md5("fanyideskweb" + t + i + "aNPG!!u6sesA>[email protected](-");
t = raw_input("please input the word you want to translate:")
u = 'fanyideskweb'
l = 'aNPG!!u6sesA>[email protected](-'
src = u + t + i + l    # u 與 l 是固定字串,t是你要翻譯的字串,i是之前的時間戳
m2 = hashlib.md5()
m2.update(src)
str_sent = m2.hexdigest()

''' 
    i:number
    from:AUTO
    to:AUTO
    smartresult:dict
    client:fanyideskweb
    salt:1515462554510
    sign:32ea4a33c063d174a069959a5df1a115
    doctype:json
    version:2.1
    keyfrom:fanyi.web
    action:FY_BY_REALTIME
    typoResult:false
'''
head = {
    'Accept':'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Content-Length':'200',
    'Connection':'keep-alive',
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    'Host':'fanyi.youdao.com',
    'Origin':'http://fanyi.youdao.com',
    'Referer':'http://fanyi.youdao.com/',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest',
    # 'Cookie': 'YOUDAO_MOBILE_ACCESS_TYPE=1; [email protected]; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; fanyi-ad-id=39535; fanyi-ad-closed=1; JSESSIONID=aaaYuYbMKHEJQ7Hanizdw; ___rl__test__cookies=1515471316884'
}
head['Cookie'] = '[email protected]; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883;  ___rl__test__cookies='+str(time.time()*1000)
                 # '___rl__test__cookies=1515471316884'

data = {
    'i': t,
    'from':'AUTO',
    'to':'AUTO',
    'smartresult':'dict',
    'client':'fanyideskweb',
    'salt':i,
    'sign':str_sent,
    'doctype':'json',
    'version':'2.1',
    'keyfrom':'fanyi.web',
    'action':'FY_BY_REALTIME',
    'typoResult':'false'
}

s = requests.session()
# print data
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
p = s.post(url,data= data,headers = head)
print p.text





相關推薦

Python編寫翻譯介面小工具

前幾天剛剛學習了urllib和json庫 urllib 庫主要是檢視一個網站網頁的原始碼。多於正則,bs配合編寫爬蟲。 它還有一個重要的功能是,能向網站提交get post的請求 還有附帶的幾個模組 urllib.request 請求模組 urllib.error 異

Python 呼叫翻譯介面

最近為了熟悉一下 js 用有道翻譯練了一下手,寫一篇部落格記錄一下,也希望能對大家有所啟迪,不過這些網站更新太快,可能大家嘗試的時候會有所不同。 首先來看一下網頁 post 過去的資料 大家不難發現,我們翻譯的內容是放在 post 的 data 中

JAVA呼叫API介面對資料庫中的中文語句進行翻譯

今天遇到一個小需求,就是將資料庫中的某個中文欄位翻譯成英文,總共有六百多條,直接只用資料庫update語句和手動翻譯效率很慢。我想這如果可以呼叫有道翻譯API介面將翻譯的語句結合原中文欄位拼接成update語句,最後將update語句做成update指令碼即可一次性全部修改資

如何用python“優雅的”呼叫翻譯

前言 其實在以前就盯上有道翻譯了的,但是由於時間問題一直沒有研究(我的騷操作還在後面,記得關注),本文主要講解如何用python呼叫有道翻譯,講解這個爬蟲與有道翻譯的js“鬥爭”的過程! 當然,本文僅供交流學習使用,適合自己做一些小東西娛樂,禁止用於商業用途!轉載請註明微信公眾號:bigsai。專案gith

Python破解翻譯反爬蟲機制

破解有道翻譯反爬蟲機制 web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的

python 自制翻譯工具

一、登陸有道翻譯頁面,分析請求 url地址:http://fanyi.youdao.com/ 綜合上述分析,當改變裡面內容時,Form Data(向後臺傳送的資料)中salt、sign、ts的值在變化,其他幾個沒有變化 二、找到請求的JS 連結地址為:http://shar

Python(4) 用Python破解翻譯反爬蟲機制

web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的API服務怎麼賺錢)。這個反爬蟲機制在爬

翻譯介面 破解

有道翻譯 API 最近有些任務需要將中文翻譯成英文,由於個人英文水平問題,每次都要開啟好幾個線上翻譯網頁,一句一句的丟進去,取最佳者為所用,甚是麻煩。 任務完成之後,就稍微研究了一下各個翻譯介面(Github地址,求star),下面以 “有道翻譯 API”

Java 呼叫 翻譯API

利用有道API進行翻譯     import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Unsupported

vue.js 呼叫 翻譯API 實現翻譯功能

在 有道智雲  註冊使用者資訊並拿到 有道翻譯的 應用ID 和 應用金鑰 (怎麼註冊,網站都有) 呼叫 API http地址: http://openapi.youdao.com/api?q=需要翻譯的文字&appKey=應用ID&salt=隨機數&

如何呼叫翻譯API(Java,HTTP)

申請Key 首先如圖進入有道翻譯,在下方點選“有道翻譯API”。 緊接著來呼叫資料介面,按提示完成下列輸入框。 如下圖所示,已經申請成功了。 下圖是官方給的示例,可以有xml和jso

Python學習】python爬蟲翻譯的實現

一、有道翻譯 1.1  實驗環境         Anaconda2-4.3.1(Python2.7) 1.2  所需模組         ①request         ②json 1.3  一些

利用python進行翻譯

# -*- coding: UTF-8 -*- from urllib import request from urllib import parse import json def youdao(English): Request_URL='http://fany

基於微信公眾平臺的Python開發——翻譯

版本:1.1,請求方式:get,編碼方式:utf-8 主要功能:中英互譯,同時獲得有道翻譯結果和有道詞典結果(可能沒有) 引數說明:  type - 返回結果的型別,固定為data  doctype - 返回結果的資料格式,xml或json或jsonp  version - 版本,當前最新版本為

Python爬蟲】翻譯最新爬蟲教程,帶GUI應用介面,2018年3月18日實測可用

最新的有道翻譯爬蟲程式碼,包含應用程式介面,更新於20180318import urllib.request import urllib.parse import json import time import gzip import random import hashli

python之爬蟲的入門03------post請求偽造、程式猿是怎麼玩翻譯

import urllib.request import urllib.parse import json content = input('請輸入要翻譯內容:') # url = 'http://fanyi.youdao.com/translate_o?smartresult=di

非官方介面-查詢英語單詞詳細資訊 C# API翻譯 查詢單詞詳細資訊

有道翻譯有官方介面,也有非官方介面。 有道官方介面 官方介面:https://openapi.youdao.com/openapi 可查詢英語單詞註釋、單詞發音、網路釋義(不一定存在),可獲取線上發音地址。 具體使用,可參考 C# 有道API翻譯 查詢單詞詳細資訊 有道非官方介面 何謂非官方介面,

python 翻譯

import requests import time import random import hashlib i = str(int(time.time()*1000)+random.randint(1,10)) t = input("please input the word you want t

python爬取翻譯遇到反爬,3分鐘反反爬繞過其反爬

利用有道翻譯的介面,自制一個翻譯程式 檢視其翻譯介面,發現post請求需要傳很多引數,而且經過測驗,satl,sigh屬於動態生成的,遇到這種問題怎麼辦?當然有時間的情況下,可以去研究這些引數在哪個響應中返回,或者怎麼構造,但是一般在工作中我們可能需求來了,不

python爬取翻譯出錯 {‘errorcode’:50}

import urllib.request import urllib.parse url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" key=input("請輸入