Python 呼叫有道的翻譯介面
最近為了熟悉一下 js 用有道翻譯練了一下手,寫一篇部落格記錄一下,也希望能對大家有所啟迪,不過這些網站更新太快,可能大家嘗試的時候會有所不同。
首先來看一下網頁 post 過去的資料
大家不難發現,我們翻譯的內容是放在 post 的 data 中的,這些引數,除了 salt 和 sign 要麼就是不會變化,要麼就是一眼能看出來意義的;那麼這個 salt 和 sign 是什麼呢?salt 根據 ta 資料的特徵,我們應該會想到,這應該是一個時間戳,而 sign 又是什麼呢?我們一起來看一下找到這個 js 檔案,最上面這個 send 檔案
將裡面的 js 程式碼拷貝出來,格式化一下,搜尋 sign
我們發現,salt 確實是一個時間戳,但 sign 呢?,這裡對 sign 的計算稍微多囉嗦幾句,如圖:
大家發現 sign 的值,也就是 o 一共是對四個引數進行求 md5 碼,兩個是定值,一個是前面求到的時間戳,還有一個是什麼呢?這個地方我也找了挺久的(還是不懂 js 的痛啊,哭。。。)剩下的引數,就是圖片中所謂的 tvar 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("請輸入