ホームページ >バックエンド開発 >Python チュートリアル >リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法
リクエスト ライブラリを Python で使用するには、まず pip を使用してインストールする必要があります。これを行うには、ターミナルで次のコマンドを実行します。
pip install requests
ライブラリがインストールされたら、それを使用して HTTP リクエストを行うことができます。以下は、GET リクエストの作成方法の例です。
import requests response = requests.get('https://www.baidu.com') print(response.text)
この例では、リクエスト ライブラリをインポートし、get メソッドを使用して https://www.baidu への GET リクエストを作成します。コム。サーバーの応答は応答変数に保存され、応答テキストをコンソールに出力します。
get メソッドにパラメータを渡して、リクエストにクエリ パラメータを含めることもできます。
import requests params = {'key1': 'value1', 'key2': 'value2'} response = requests.get('https://www.example.com', params=params) print(response.url)
この例では、クエリ パラメータの辞書を get メソッドの params パラメータに渡します。生成された URL にはクエリ パラメーターが含まれており、その URL をコンソールに出力します。
post メソッドを使用して POST リクエストを行うこともできます。
import requests data = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://www.example.com', data=data) print(response.text)
この例では、データのディクショナリを post メソッドの data パラメータに渡します。データはリクエストの本文で送信され、応答テキストがコンソールに出力されます。
Baidu 翻訳アドレスを開き、F12
を押して開発者モードを開き、翻訳済みのテキストを入力します。 「翻訳」をクリックします。下の図を見ると、要求されたアドレスと要求されたパラメータがはっきりとわかります。
Baidu Translation が投稿を https://fanyi.baidu.com に送信します。 /v2transapi リクエストでは、送信されるデータの符号のみが常に変化しているため、v2transapi を検索すると、送信したいデータ文字列を通じて署名フィールドが js によって暗号化されていることがわかりました。
# Baidu Translation のjs 分析によると、暗号化のキー コードは次のとおりです。
fake_useragent、異なる
User-Agent をランダムに生成します。キーコードは次のとおりです:
from fake_useragent import UserAgent headers = {'User-Agent': UserAgent().random}2.
sign パラメータを生成します. 暗号化された
js コードを理解できないため、
python# を直接呼び出します## サードパーティ ライブラリは js
コードを実行します。使用する前に execjs
ライブラリをインストールする必要があります。次のコードを実行します: <pre class="brush:bash;">pip3 install PyExecJS</pre>
のメソッドこのライブラリの使用も非常に簡単です。たとえば、Baidu の暗号化された
コードを抽出し、新しい js
ファイルを作成し、その中にコンテンツをコピーしたことはすでに述べました。キー コードは次のとおりです。 <pre class="brush:py;"> def generate_sign(self,query):
try:
if os.path.isfile("./baidu.js"):
with open("./baidu.js", &#39;r&#39;, encoding="utf-8") as f:
baidu_js = f.read()
ctx = execjs.compile(baidu_js)
return ctx.call(&#39;b&#39;, query)
except Exception as e:
print(e)</pre>
まず、js ファイルをキャッシュに読み込み、次に
を通じてオブジェクトを呼び出します。最後に、js
ファイル内のメソッドは、call
メソッドを呼び出すことによって実行されます。ここで、b
は js
に対応するメソッドであり、query
は、js
の b
メソッドのパラメーターです。 呼び出しが成功すると、戻り値は次のようになります:
3.
token 値を取得し、ソース コードを確認します。 Baidu 翻訳ページの findtoken
がページに保存されているため、token
.
res = request.get("https://fanyi.baidu.com").content.decode() token = re.findall(r"token: '(.*)',", res, re.M)[0]4 を取得できます。これまでのところ、すべてのリクエスト パラメータが利用できるようになったので、リクエストの構築を開始できます。コア コードは次のとおりです。
url = 'https://fanyi.baidu.com/v2transapi' sign = generate_sign("你好") data = { "from": "zh", "to": 'en', "query": "你好", "transtype": "translang", "simple_means_flag": "3", "sign": sign, "token": self.token, "domain": "common" } res = requests.post( url=url, params={"from": "zh", "to": 'en'}, data=data, headers = { 'User-Agent': UserAgent().random, } ) res.json().get("trans_result").get("data")[0].get("dst")
リクエストが成功すると、次の画像が返されます。
実際の呼び出しを通じて、次のことがわかります。すべてのリクエストが成功するわけではないため、複数のリクエストを作成し、ループ操作を実行し、それがクリアされて成功したときにループから抜け出す必要があります。キー コードは次のとおりです:
tryTimes = 0 try: while tryTimes < 100: res = self.session.post( url=url, params={"from": fromLan, "to": toLan}, data=data, ) if "trans_result" in res.text: break tryTimes += 1 return res.json().get("trans_result").get("data")[0].get("dst")
この方法では、Baidu 翻訳インターフェイスを使用して独自の翻訳インターフェイス呼び出しを行うことが完了しました。
Flask または Fastapi
を使用して、独自のニーズに応じて API インターフェイスを開発できます。以下はすべてのコードです<pre class="brush:py;">import requests
import execjs
import os
import re
import json
from loguru import logger
from fake_useragent import UserAgent
class Baidu_translate:
def __init__(self):
self.session=request.Session()
self.session.headers={
&#39;User-Agent&#39;: UserAgent( ).random,
"Host":"fanyi.baidu.com",
"X-Requested-With":"XMLHttpRequest",
"sec-ch-ua":&#39;"Not?A_Brand";="8","Chromium";v="108","Microsoft Edge";V="108",
"sec-ch-ua-mobile":"?0",
"Sec-Fetch-Dest":"document",
"Sec-Fetch-Mode":"navigate",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-User":"?1",
"Connection":"keep-alive",
}
self.session.get("https://fanyi.baidu.com" )
res = self.session.get("https://fanyi.baidu.com").content.decode( )
self.token = re.findall(r"token: &#39;(.*)&#39;,",res,re.M)[0]
def generate_sign(self,query):
try:
if os.path.isfile("./baidu.js"):
with open("./baidu.js",&#39;r&#39;,encoding="utf-8") as f:
baidu_js = f.read( )
ctx = execjs.compile(baidu_js)
return ctx.call(&#39;b&#39;,query)
except Exception as e:
print(e)
def lang_detect(self,src: str) -> str:
url = "https://fanyi.baidu.com/langdetect"
fromLan = self.session.post(url, data={"query": src}).json()["lan"]
return fromLan
def translate(self,query: str, tolan: str = "", fromLan: str = "") -> str:
if fromLan == "":
fromLan = self.lang_detect(query)
if toLan == "":
toLan = "zh" if fromLan != "zh" else "en"
url = &#39;https://fanyi.baidu.com/v2transapi&#39;
sign = self.generate_sign(query)
data = {
"from" : fromLan,
"to": toLan,
"query": query,
"transtype":"translang",
"simple_means_flag":"3",
"sign" : sign,
"token": self.token,
"domain":"common"
}
tryTimes = 0
try:
while tryTimes < 100:
res = self.session.post(
url=url,
params={"from": fromLan,"to": toLan},
data=data,
)
if "trans_result" in res.text:
break
tryTimes +=1
return res.json().get("trans_result").get("data")[0].get("dst")
except Exception as e:
print(e)
def test():
url =&#39;https://fanyi.baidu.com/v2transapi&#39;
sign = generate_sign("你好")
data = {
"from":"zh",
"to":&#39; en&#39;,
"query":"你好",
"transtype":"translang",
"simple_means_flag":"3",
"sign": sign,
"token": self.token,
"domain": "common"
}
res = requests.post(
url=url,
params={"from": "zh","to":&#39;en&#39;},
data=data,
headers = {
&#39;User-Agent&#39;: UserAgent( ).random,
}
)
res .json()
if _name__ == "__main__":
baidu_tran = Baidu_Translate()
sign = baidu_tran.generate_sign("你好")</pre>
以上がリクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。