Python爬虫【实战篇】百度翻译

时间:2024-04-02 11:33:56

先看代码

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":"",
"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

Python爬虫【实战篇】百度翻译

第一个url会返回我们所输入的语言类型

Python爬虫【实战篇】百度翻译

请看代码

# 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()

终端输入 python baidufanyi.py 学生 就可以得到结果。