ホームページ >バックエンド開発 >Python チュートリアル >リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法

王林
王林転載
2023-05-14 22:13:22984ブラウズ

リクエスト ライブラリの基本的な使い方

インストール

リクエスト ライブラリを Python で使用するには、まず pip を使用してインストールする必要があります。これを行うには、ターミナルで次のコマンドを実行します。

pip install requests

Using

ライブラリがインストールされたら、それを使用して 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 翻訳を分析する

Baidu 翻訳アドレスを開き、F12 を押して開発者モードを開き、翻訳済みのテキストを入力します。 「翻訳」をクリックします。下の図を見ると、要求されたアドレスと要求されたパラメータがはっきりとわかります。

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法

Baidu Translation が投稿を https://fanyi.baidu.com に送信します。 /v2transapi リクエストでは、送信されるデータの符号のみが常に変化しているため、v2transapi を検索すると、送信したいデータ文字列を通じて署名フィールドが js によって暗号化されていることがわかりました。

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法

# Baidu Translation の

js 分析によると、暗号化のキー コードは次のとおりです。

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法

# # 呼び出しプロセス全体を理解したので、すべてのパラメータを自分で構築できます。このようにしてコードを書くことができます。

インターフェース コードを記述します

1。リクエストが失敗しないようにするには、ブラウザーのリクエストを模倣し、リクエスト ヘッダーをリクエストに追加する必要があります。サードパーティのライブラリを使用します。

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

コードを抽出し、新しい js ファイルを作成し、その中にコンテンツをコピーしたことはすでに述べました。キー コードは次のとおりです。 <pre class="brush:py;"> def generate_sign(self,query): try: if os.path.isfile(&quot;./baidu.js&quot;): with open(&quot;./baidu.js&quot;, &amp;#39;r&amp;#39;, encoding=&quot;utf-8&quot;) as f: baidu_js = f.read() ctx = execjs.compile(baidu_js) return ctx.call(&amp;#39;b&amp;#39;, query) except Exception as e: print(e)</pre> まず、js ファイルをキャッシュに読み込み、次に

execjs

を通じてオブジェクトを呼び出します。最後に、js ファイル内のメソッドは、call メソッドを呼び出すことによって実行されます。ここで、bjs に対応するメソッドであり、query は、jsb メソッドのパラメーターです。 呼び出しが成功すると、戻り値は次のようになります:

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法3.

token

値を取得し、ソース コードを確認します。 Baidu 翻訳ページの findtoken がページに保存されているため、token.

res = request.get("https://fanyi.baidu.com").content.decode()
token = re.findall(r"token: &#39;(.*)&#39;,", res, re.M)[0]
リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法4 を取得できます。これまでのところ、すべてのリクエスト パラメータが利用できるようになったので、リクエストの構築を開始できます。コア コードは次のとおりです。

    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().get("trans_result").get("data")[0].get("dst")

リクエストが成功すると、次の画像が返されます。

リクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法実際の呼び出しを通じて、次のことがわかります。すべてのリクエストが成功するわけではないため、複数のリクエストを作成し、ループ操作を実行し、それがクリアされて成功したときにループから抜け出す必要があります。キー コードは次のとおりです:

        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={ &amp;#39;User-Agent&amp;#39;: UserAgent( ).random, &quot;Host&quot;:&quot;fanyi.baidu.com&quot;, &quot;X-Requested-With&quot;:&quot;XMLHttpRequest&quot;, &quot;sec-ch-ua&quot;:&amp;#39;&quot;Not?A_Brand&quot;;=&quot;8&quot;,&quot;Chromium&quot;;v=&quot;108&quot;,&quot;Microsoft Edge&quot;;V=&quot;108&quot;, &quot;sec-ch-ua-mobile&quot;:&quot;?0&quot;, &quot;Sec-Fetch-Dest&quot;:&quot;document&quot;, &quot;Sec-Fetch-Mode&quot;:&quot;navigate&quot;, &quot;Sec-Fetch-Site&quot;: &quot;same-origin&quot;, &quot;Sec-Fetch-User&quot;:&quot;?1&quot;, &quot;Connection&quot;:&quot;keep-alive&quot;, } self.session.get(&quot;https://fanyi.baidu.com&quot; ) res = self.session.get(&quot;https://fanyi.baidu.com&quot;).content.decode( ) self.token = re.findall(r&quot;token: &amp;#39;(.*)&amp;#39;,&quot;,res,re.M)[0] def generate_sign(self,query): try: if os.path.isfile(&quot;./baidu.js&quot;): with open(&quot;./baidu.js&quot;,&amp;#39;r&amp;#39;,encoding=&quot;utf-8&quot;) as f: baidu_js = f.read( ) ctx = execjs.compile(baidu_js) return ctx.call(&amp;#39;b&amp;#39;,query) except Exception as e: print(e) def lang_detect(self,src: str) -&gt; str: url = &quot;https://fanyi.baidu.com/langdetect&quot; fromLan = self.session.post(url, data={&quot;query&quot;: src}).json()[&quot;lan&quot;] return fromLan def translate(self,query: str, tolan: str = &quot;&quot;, fromLan: str = &quot;&quot;) -&gt; str: if fromLan == &quot;&quot;: fromLan = self.lang_detect(query) if toLan == &quot;&quot;: toLan = &quot;zh&quot; if fromLan != &quot;zh&quot; else &quot;en&quot; url = &amp;#39;https://fanyi.baidu.com/v2transapi&amp;#39; sign = self.generate_sign(query) data = { &quot;from&quot; : fromLan, &quot;to&quot;: toLan, &quot;query&quot;: query, &quot;transtype&quot;:&quot;translang&quot;, &quot;simple_means_flag&quot;:&quot;3&quot;, &quot;sign&quot; : sign, &quot;token&quot;: self.token, &quot;domain&quot;:&quot;common&quot; } tryTimes = 0 try: while tryTimes &lt; 100: res = self.session.post( url=url, params={&quot;from&quot;: fromLan,&quot;to&quot;: toLan}, data=data, ) if &quot;trans_result&quot; in res.text: break tryTimes +=1 return res.json().get(&quot;trans_result&quot;).get(&quot;data&quot;)[0].get(&quot;dst&quot;) except Exception as e: print(e) def test(): url =&amp;#39;https://fanyi.baidu.com/v2transapi&amp;#39; sign = generate_sign(&quot;你好&quot;) data = { &quot;from&quot;:&quot;zh&quot;, &quot;to&quot;:&amp;#39; en&amp;#39;, &quot;query&quot;:&quot;你好&quot;, &quot;transtype&quot;:&quot;translang&quot;, &quot;simple_means_flag&quot;:&quot;3&quot;, &quot;sign&quot;: sign, &quot;token&quot;: self.token, &quot;domain&quot;: &quot;common&quot; } res = requests.post( url=url, params={&quot;from&quot;: &quot;zh&quot;,&quot;to&quot;:&amp;#39;en&amp;#39;}, data=data, headers = { &amp;#39;User-Agent&amp;#39;: UserAgent( ).random, } ) res .json() if _name__ == &quot;__main__&quot;: baidu_tran = Baidu_Translate() sign = baidu_tran.generate_sign(&quot;你好&quot;)</pre>

以上がリクエストライブラリを使用してPythonで翻訳インターフェースを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。