最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用request庫(kù)實(shí)現(xiàn)翻譯接口

 更新時(shí)間:2023年04月09日 11:31:19   作者:didiplus  
這篇文章主要為大家詳細(xì)介紹了Python如何利用request庫(kù)打造自己的翻譯接口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

通過(guò)閱讀之前python基礎(chǔ)篇的文章,基本上對(duì)python這門(mén)語(yǔ)言有了初步的了解。基礎(chǔ)篇的文章都是介紹python的一些語(yǔ)法和函數(shù)的使用方法。實(shí)戰(zhàn)篇是通過(guò)一個(gè)完整的案例講解python在實(shí)際開(kāi)發(fā)中運(yùn)用方法。今天通過(guò)做一個(gè)翻譯的接口來(lái)介紹一下request庫(kù)的基本用法。

request庫(kù)的基本使用

安裝

要使用Python中的requests庫(kù),首先需要使用pip安裝它。您可以在終端中運(yùn)行以下命令來(lái)完成此操作:

pip install requests

使用

安裝庫(kù)后,您可以使用它來(lái)進(jìn)行HTTP請(qǐng)求。以下是如何進(jìn)行GET請(qǐng)求的示例:

import requests

response = requests.get('https://www.baidu.com')
print(response.text)

在此示例中,我們導(dǎo)入requests庫(kù),然后使用get方法進(jìn)行GET請(qǐng)求到https://www.baidu.com。服務(wù)器的響應(yīng)存儲(chǔ)在response變量中,我們將響應(yīng)文本打印到控制臺(tái)。

還可以將參數(shù)傳遞給get方法,以在請(qǐng)求中包含查詢參數(shù):

import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params)
print(response.url)

在此示例中,我們將查詢參數(shù)的字典傳遞給get方法的params參數(shù)。生成的URL將包括查詢參數(shù),我們將URL打印到控制臺(tái)。

還可以使用post方法進(jìn)行POST請(qǐng)求:

import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com', data=data)
print(response.text)

在此示例中,我們將數(shù)據(jù)的字典傳遞給post方法的data參數(shù)。數(shù)據(jù)將在請(qǐng)求的正文中發(fā)送,我們將響應(yīng)文本打印到控制臺(tái)。

開(kāi)發(fā)自己的翻譯接口

分析百度翻譯

打開(kāi)百度翻譯地址,然后按F12打開(kāi)開(kāi)發(fā)者模式,輸入翻譯的內(nèi)容,點(diǎn)擊翻譯,通過(guò)下圖,可以清楚看到請(qǐng)求的地址和請(qǐng)求的參數(shù)

百度翻譯通過(guò)向https://fanyi.baidu.com/v2transapi發(fā)送post請(qǐng)求,發(fā)送的數(shù)據(jù)中只有sign是不斷變化的,搜索v2transapi發(fā)現(xiàn)sign字段是通過(guò)js通過(guò)你要發(fā)送的數(shù)據(jù)字符串進(jìn)行加密得到的。

通過(guò)百度翻譯的js分析得出加密的關(guān)鍵代碼如下:

現(xiàn)在已經(jīng)搞清楚了整個(gè)調(diào)用的流程,所有的參數(shù)都可以自己構(gòu)造。這樣就可以寫(xiě)代碼了。

寫(xiě)接口代碼

1、為了防止請(qǐng)求失敗,需要模仿瀏覽器請(qǐng)求,在請(qǐng)求時(shí)加上請(qǐng)求頭,我們采用fake_useragent這個(gè)第三方庫(kù),隨機(jī)生成不同的User-Agent。關(guān)鍵代碼如下:

from fake_useragent import UserAgent
headers = {'User-Agent': UserAgent().random}

2、生成sign參數(shù),由于加密的js代碼我們看不明白,直接調(diào)用python的第三方庫(kù)執(zhí)行js代碼,使用前需要安裝execjs庫(kù),執(zhí)行如下的代碼:

pip3 install PyExecJS 

這個(gè)庫(kù)使用方法也很簡(jiǎn)單,例如,上面我們已經(jīng)把百度的加密js代碼已經(jīng)提取出來(lái)了,并新建一個(gè)js文件,把內(nèi)容復(fù)制進(jìn)去。關(guān)鍵代碼如下:

    def generate_sign(self,query):
        try:
            if os.path.isfile("./baidu.js"):
                with open("./baidu.js", 'r', encoding="utf-8") as f:
                    baidu_js = f.read()
            ctx = execjs.compile(baidu_js)
            return ctx.call('b', query)
        except Exception as e:
            print(e)

先把js文件讀到緩存中,再通過(guò)execjs調(diào)用該對(duì)象。最后通過(guò)調(diào)用call方法執(zhí)行js文件的里面的方法,其中b是對(duì)應(yīng)js的方法,queryjsb方法的參數(shù)。

調(diào)用成功后,返回如下:

3、獲取token值,通過(guò)觀察百度翻譯頁(yè)面的源碼,發(fā)現(xiàn)token是存放在頁(yè)面中的,這樣我們就可以通過(guò)請(qǐng)求頁(yè)面獲取到token.

res = request.get("https://fanyi.baidu.com").content.decode()
token = re.findall(r"token: '(.*)',", res, re.M)[0]

4、到目前為止所有的請(qǐng)求參數(shù)已經(jīng)有了,這樣我們就可以開(kāi)始構(gòu)造請(qǐng)求。核心代碼如下:

    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")

請(qǐng)求成功后,會(huì)返回如下圖:

通過(guò)實(shí)際的調(diào)用中發(fā)現(xiàn)不是每次請(qǐng)求成功的,所以需要多次進(jìn)行請(qǐng)求,通過(guò)一個(gè)循環(huán)操作,當(dāng)清楚成功就跳出循環(huán),關(guān)鍵代碼如下:

        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")

這樣我們就已經(jīng)完成利用百度翻譯接口,做成自己的翻譯接口調(diào)用了??梢愿鶕?jù)自己的需求采用FlaskFastapi開(kāi)發(fā)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={
            'User-Agent': UserAgent( ).random,
            "Host":"fanyi.baidu.com",
            "X-Requested-With":"XMLHttpRequest",
            "sec-ch-ua":'"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: '(.*)',",res,re.M)[0]
        
    def generate_sign(self,query):
        try:
            if os.path.isfile("./baidu.js"):
                with open("./baidu.js",'r',encoding="utf-8") as f:
                    baidu_js = f.read( )
            ctx = execjs.compile(baidu_js)
            return ctx.call('b',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 = 'https://fanyi.baidu.com/v2transapi'
       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 ='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()
    
if _name__ == "__main__":
    baidu_tran = Baidu_Translate()
    sign = baidu_tran.generate_sign("你好") 

到此這篇關(guān)于Python利用request庫(kù)實(shí)現(xiàn)翻譯接口的文章就介紹到這了,更多相關(guān)Python request翻譯接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python編程開(kāi)發(fā)之類(lèi)型轉(zhuǎn)換convert實(shí)例分析

    python編程開(kāi)發(fā)之類(lèi)型轉(zhuǎn)換convert實(shí)例分析

    這篇文章主要介紹了python編程開(kāi)發(fā)之類(lèi)型轉(zhuǎn)換convert用法,結(jié)合實(shí)例形式分析了Python中常見(jiàn)的數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換convert的具體使用方法,需要的朋友可以參考下
    2015-11-11
  • python人工智能深度學(xué)習(xí)入門(mén)邏輯回歸限制

    python人工智能深度學(xué)習(xí)入門(mén)邏輯回歸限制

    這篇文章主要為大家介紹了python人工智能深度學(xué)習(xí)入門(mén)之邏輯回歸限制的詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法

    python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法

    下面小編就為大家分享一篇python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python各層級(jí)目錄下import方法代碼實(shí)例

    python各層級(jí)目錄下import方法代碼實(shí)例

    這篇文章主要介紹了python各層級(jí)目錄下import方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python求1到n的階乘之和的實(shí)例

    Python求1到n的階乘之和的實(shí)例

    這篇文章主要介紹了Python求1到n的階乘之和的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python使用OpenCV轉(zhuǎn)換圖像大小

    Python使用OpenCV轉(zhuǎn)換圖像大小

    在Python中,使用OpenCV庫(kù)來(lái)轉(zhuǎn)換圖像大小是一個(gè)常見(jiàn)的操作,它可以幫助你調(diào)整圖像到特定的尺寸,以適應(yīng)不同的應(yīng)用場(chǎng)景,比如圖像預(yù)處理、模型輸入等,下面是一個(gè)詳細(xì)的代碼示例,展示了如何使用OpenCV來(lái)轉(zhuǎn)換圖像的大小,需要的朋友可以參考下
    2024-09-09
  • Python讀取文件內(nèi)容的三種常用方式及效率比較

    Python讀取文件內(nèi)容的三種常用方式及效率比較

    這篇文章主要介紹了Python讀取文件內(nèi)容的三種常用方式及效率比較,結(jié)合具體實(shí)例形式給出了三種文件讀取的常見(jiàn)方法并對(duì)比分析了讀取速度,需要的朋友可以參考下
    2017-10-10
  • selenium+python實(shí)現(xiàn)基本自動(dòng)化測(cè)試的示例代碼

    selenium+python實(shí)現(xiàn)基本自動(dòng)化測(cè)試的示例代碼

    這篇文章主要介紹了selenium+python實(shí)現(xiàn)基本自動(dòng)化測(cè)試的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用

    Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用

    csv文件是一種逗號(hào)分隔的純文本形式存儲(chǔ)的表格數(shù)據(jù),Python內(nèi)置了CSV模塊,可直接通過(guò)該模塊實(shí)現(xiàn)csv文件的讀寫(xiě)操作,下面這篇文章主要給大家介紹了關(guān)于Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用,需要的朋友可以參考下
    2022-09-09
  • 淺談Python peewee 使用經(jīng)驗(yàn)

    淺談Python peewee 使用經(jīng)驗(yàn)

    這篇文章主要介紹了淺談Python peewee 使用經(jīng)驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論

崇阳县| 股票| 襄垣县| 中超| 克东县| 开阳县| 卓资县| 苏州市| 溧水县| 屏边| 保山市| 离岛区| 九龙县| 巫山县| 张家界市| 龙门县| 屏南县| 岐山县| 县级市| 衡山县| 满洲里市| 湘潭县| 通化市| 衡南县| 高台县| 通城县| 新丰县| 佛坪县| 灵寿县| 合山市| 宣化县| 额尔古纳市| 麻栗坡县| 千阳县| 沙坪坝区| 祁连县| 四子王旗| 宝清县| 河西区| 姚安县| 康定县|