記事ディレクトリ
最初の試み
-
Google の翻訳 API は常に変化しています。Google の翻訳 API を自分で見つける必要があります。これが最も安全な解決策です。
-
まず、Google Chrome で Google の翻訳インターフェースを開き、データのリクエスト方法を確認します
-
図に示すように、右クリックして確認し、開発者ツールに入り、ネットワーク (ネットワーク) を選択します。
-
clear をクリックして以前のすべてのリクエストを視覚的にクリアし、後で実際の API リクエストを見つけることができるようにします
-
-
-
Google 翻訳は 1 秒に 1 回程度リクエストを送信し、まもなく Google サーバーから翻訳結果が返されます. 調査の結果、batchexecute の最初にある次のリクエストが必要です.
-
-
さらに分析するためにクリックしてみましょう。これが投稿リクエストであることがわかります。
-
ペイロードから、フォーム データであるポスト リクエストを送信するときに使用されるパラメータを確認できます。
-
-
プレビューから、JSON形式のデータである翻訳結果を見ることができます
-
2022.12.26
-
上記の方法でも問題ありませんが、このインターフェースは以前ほど見つけにくいため、Google 検索エンジンで提供されている Google 翻訳を使用してこのインターフェースを見つけます。
-
最初に Web ページで翻訳をテストしてみましょう。結果が返されることがわかります。
-
これは投稿リクエストです。翻訳する必要があるテキストを次の URL に送信すると、サーバーは対応する結果を返します。
Google Translate API 関連情報
URLを送る
### https://www.google.com/async/translate?vet=12ahUKEwjp-9mwmZf8AhXT0GEKHQc7Cs8QqDh6BAgFECw..i&ei=6YepY6njDdOhhwOH9qj4DA&yv=3&cs=0
- この URL は長いですが、コア部分は
### https://www.google.com/async/translate
- 次のパラメーターはあまり役に立ちませんが、最初にここに保持し、後で合理化された検証を行います。
提出データ
### async=translate,sl:zh-TW,tl:zh-CN,st:1111,id:1672054875193,qc:true,ac:true,_id:tw-async-translate,_pms:s,_fmt:pc
- postman を使用して投稿リクエストを作成する
でも意外と失敗した
- 返されるのは 404 ウェブページであり、私が望む翻訳結果ではありません。
- Cookie の追加に関係はないと思います。パラメーターに Cookie を追加しましょう。
- しかし、Cookie を追加した後に失敗するとは思っていませんでした
実験
パラメータを削除
- すべてのパラメータを削除した後でも、結果は正常に取得できることがわかりました
ヘッダーを削除
-
Content-Length を削除した後、結果が返されない #設定されたヘッダー パラメータが不十分です
-
結論: ヘッダーにはできるだけ多くのパラメーターを含める必要があり、すべてのパラメーターを元の要求に含めるのが最善です。
-
対応する Python コードを記述します
コード
import requests
url = "https://www.google.com.hk/async/translate"
payload = "async=translate,sl:en,tl:zh-CN,st:1111,id:1672056488960,qc:true,ac:true,_id:tw-async-translate,_pms:s,_fmt:pc"
headers = {
'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-full-version': '"108.0.5359.125"',
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'sec-ch-ua-platform-version': '"10.0.0"',
'sec-ch-ua-full-version-list': '"Not?A_Brand";v="8.0.0.0", "Chromium";v="108.0.5359.125", "Google Chrome";v="108.0.5359.125"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-model': '',
'sec-ch-ua-wow64': '?0',
'sec-ch-ua-platform': '"Windows"',
'Accept': '*/*',
'X-Client-Data': 'CKW1yQEIhbbJAQiktskBCMS2yQEIqZ3KAQjb08oBCLD+ygEIlaHLAQjv8swBCN75zAEI5PrMAQjxgM0BCLKCzQEI7ILNAQjIhM0BCO+EzQEIt4XNAQ==',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'host': 'www.google.com.hk',
'Cookie': '1P_JAR=2022-12-26-12; NID=511=eVLI1bG9nhyOZtqU14JBHm5Be00epdxfR4XmfQeehYyIkzgpXi6dbpNY75ZMVyS7aOjoM2oZ5WdoR8eNq6wi1-e_J0NeoyI0dtsHW-_8Ik4PGrqvuGHdcvVC03zTOEK2TY1FZL85Wimo_ZPIE3hGIrmGPSiel6-rRRW9lD30UPs'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
- 現在の結果を正常に返すことができます。
- しかし、この結果は私たちが望んでいるものではありません。一緒に分析する必要があります
返された結果の解析
- 実際、見つけるのも非常に簡単です。
<span id="tw-answ-target-text">
と</span>
の間のテキストを見つけるだけです。
- 抽出後はとてもいい
完全なコード
def Google_Translate(origin_string):
import requests
url = "https://www.google.com.hk/async/translate"
payload = "async=translate,sl:en,tl:zh-CN,st:{},id:1672056488960,qc:true,ac:true,_id:tw-async-translate,_pms:s,_fmt:pc".format(origin_string)
headers = {
'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-full-version': '"108.0.5359.125"',
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'sec-ch-ua-platform-version': '"10.0.0"',
'sec-ch-ua-full-version-list': '"Not?A_Brand";v="8.0.0.0", "Chromium";v="108.0.5359.125", "Google Chrome";v="108.0.5359.125"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-model': '',
'sec-ch-ua-wow64': '?0',
'sec-ch-ua-platform': '"Windows"',
'Accept': '*/*',
'X-Client-Data': 'CKW1yQEIhbbJAQiktskBCMS2yQEIqZ3KAQjb08oBCLD+ygEIlaHLAQjv8swBCN75zAEI5PrMAQjxgM0BCLKCzQEI7ILNAQjIhM0BCO+EzQEIt4XNAQ==',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'host': 'www.google.com.hk',
'Cookie': '1P_JAR=2022-12-26-12; NID=511=eVLI1bG9nhyOZtqU14JBHm5Be00epdxfR4XmfQeehYyIkzgpXi6dbpNY75ZMVyS7aOjoM2oZ5WdoR8eNq6wi1-e_J0NeoyI0dtsHW-_8Ik4PGrqvuGHdcvVC03zTOEK2TY1FZL85Wimo_ZPIE3hGIrmGPSiel6-rRRW9lD30UPs'
}
response = requests.request("POST", url, headers=headers, data=payload)
def find_string_between_A_amd_B(string, string_A, string_B): # 查找两段字符串之间的字符
import re
regular = '{}(.*?){}'.format(string_A, string_B)
result = re.findall(regular, string)
return result
result = find_string_between_A_amd_B(response.text, '', '')
return result
result = Google_Translate('222')
print("result:", result)
結果を返す
result = Google_Translate('222')
print(“結果:”, 結果)
[外链图片转存中...(img-nfuTyPwt-1672058973251)]
[外链图片转存中...(img-ICHoHbvS-1672058973252)]
#