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

王林
リリース: 2023-05-14 22:13:22
転載
943 人が閲覧しました

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

インストール

リクエスト ライブラリを 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 ライブラリをインストールする必要があります。次のコードを実行します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">pip3 install PyExecJS</pre><div class="contentsignin">ログイン後にコピー</div></div> のメソッドこのライブラリの使用も非常に簡単です。たとえば、Baidu の暗号化された

js

コードを抽出し、新しい js ファイルを作成し、その中にコンテンツをコピーしたことはすでに述べました。キー コードは次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div> まず、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 インターフェイスを開発できます。以下はすべてのコードです

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("你好")
ログイン後にコピー

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

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート