Python爬蟲【實戰篇】百度翻譯


先看代碼

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}
data = {
    "from":"en",
    "to":"zh",
    "query":"student",
    "transtype":"translang",
    "simple_means_flag":"3",
    "sign":"372549.85108",
    "token":"e89a8f037aac1b51a86cbc82356949d"
}
post_url = "http://fanyi.baidu.com/v2transapi"

r = requests.post(post_url,data=data,headers=headers)
print(r.content.decode())

從代碼中可以看到,所攜帶的請求參數比較多,可以嘗試切換成手機模式進行請求。

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
}
data = {
    "query": "學生",
    "from": "zh",
    "to": "en"
}
response = requests.post(url='https://fanyi.baidu.com/basetrans', headers=headers, data=data)
response = response.content.decode('utf-8')
print(type(response))

import json

response = json.loads(response)
print(response.get("trans")[0].get("dst"))

可以很清楚的看到,手機模式所攜帶的參數比較少,如果我們以后遇到電腦請求攜帶的參數比較多,可以切換成手機模式來進行請求,會更加容易

現在我們來實現一個終端請求的翻譯工具,下面是一次翻譯所請求的 ajax 的url

第一個url會返回我們所輸入的語言類型

請看代碼

# coding=utf-8
import requests
import json
import sys


class BaiduFanyi:
    def __init__(self, trans_str):
        self.trans_str = trans_str
        # 這個url獲取的結果是我們輸入的是中文還是英文
        self.lang_detect_url = "https://fanyi.baidu.com/langdetect"
        self.trans_url = "https://fanyi.baidu.com/basetrans"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}

    def parse_url(self, url, data):  # 發送post請求,獲取響應
        response = requests.post(url, data=data, headers=self.headers)
        # print(json.loads(response.content.decode()))
        return json.loads(response.content.decode())

    def get_ret(self, dict_response):  # 提取翻譯的結果
        ret = dict_response["trans"][0]["dst"]
        print("result is :", ret)

    def run(self):  # 實現主要邏輯
        # 1.獲取語言類型
        # 1.1 准備post的url地址,post_data
        lang_detect_data = {"query": self.trans_str}
        # 1.2 發送post請求,獲取響應
        lang = self.parse_url(self.lang_detect_url, lang_detect_data)["lan"]
        # 1.3 提取語言類型
        # 2.准備post的數據
        trans_data = {"query": self.trans_str, "from": "zh", "to": "en"} if lang == "zh" else \
            {"query": self.trans_str, "from": "en", "to": "zh"}
        # 3.發送請求,獲取響應
        dict_response = self.parse_url(self.trans_url, trans_data)
        # 4.提取翻譯的結果
        self.get_ret(dict_response)


if __name__ == '__main__':
    trans_str = sys.argv[1]
    baidu_fanyi = BaiduFanyi(trans_str)
    baidu_fanyi.run()
View Code

終端輸入 python baidufanyi.py 學生 就可以得到結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM