- 一、需求
- 二、思路分析
- 三、遇到的问题及解决方法
- 四、代码分享
二、思路分析通过抓取百度翻译的翻译接口,实现中译英
1.明确目标url
url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
2.向目标url发送请求、获取对应的响应
response = requests.post(url, headers=headers, data=form_data)
3.提取翻译的结果
print(response.content.decode())
三、遇到的问题及解决方法
1. bug:“error”:997
solution:可能是百度翻译的反爬措施,需要在headers请求头带上cookie进一步伪装
2. bug:改变翻译内容后(“什么” -> “好的” ),出现"error":998
solution:观察发现,不同翻译内容的sign值不同,且sign无法在element中找到,可能需要通过js逆向解析
3. bug:使用python运行js代码后出现报错
execjs._exceptions.ProgramError: ReferenceError: i is not defined
solution: 找到i,定义i
4. bug:再次运行js代码后出现新的报错
execjs._exceptions.ProgramError: ReferenceError: n is not defined
solution:找到n,定义n
import re
import requests
import execjs # 注意这里需要下载第三方库
# pip install PyExecJS -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
data = input("请输入你要翻译的内容:")
with open("baidu_trans.js", "r", encoding="utf-8") as f:
# 读取js代码
js_data = f.read()
# 编译
js_obj = execjs.compile(js_data)
# 执行js代码 -- 以字符串的形式传入函数;传参
sign = js_obj.call("e", data)
# print(sign)
url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"
headers = {
"Referer": "https://fanyi.baidu.com/?aldtype=16047",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
"Cookie": "" # 带上你的cookie
}
form_data = {
"from": "zh", # 中文
"to": "en", # 英文
"query": data, # 翻译的内容
"transtype": "translang",
"simple_means_flag": "3",
"sign": sign,
"token": "a6063d67d2ad5029a79978ae39b7e8b6",
"domain": "common"
}
response = requests.post(url, headers=headers, data=form_data)
# 提取数据 -- 使用正则匹配
res = re.findall(r'"dst":"(.*?)"', response.content.decode())[0]
print("翻译结果:", res)
- 写在最后:有任何代码问题,欢迎交流~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)