笔者最近在做一个前端的翻译功能,用到了百度翻译的api,不过每月都有200万字的翻译限制。所以就开始用python爬虫来尝试爬取一下百度的翻译。
先进入百度的翻译页面,网址 http://fanyi.baidu.com/translate。然后进入开发者模式(F12),切换成手机模式。因为PC端的web在post提交数据的时候会有2个我们不好获取的参数(其中一个是token),但是手机版的没有这2个参数,所以我们选择手机版进行所需要的数据收集。
随便输入一些东西,然后查询。可以发现开发者工具的network中,extendtrans和basetrans这两个文件都是翻译的,然后楼主测试了一下发现extendtrans是扩展翻译,主要是单词和词语的扩展翻译(如果是一个句子的活,则可能没有返回想要的内容)。而basetrans是基础翻译,句子也是可以翻译的。所以楼主这里就选择了basetrans。然后查看basetrans的headeres。
request URL:请求的地址
request method:请求的方式,一般常见的也就Post和Get
user-agent:用户代理,你会发现pc和手机请求的时候这个里面的值是不一样的。而且如果你不设置的话,里面会有一个python的默认值。这个值可能会影响网站给你返回的数据。
form data:就是我们提交的表单数据了。而参数的zh表示中文,en表示英文。(下面是百度翻译提供的语种)
语言简写 | 名称 |
---|---|
auto | 自动检测 |
zh | 中文 |
en | 英语 |
yue | 粤语 |
wyw | 文言文 |
jp | 日语 |
kor | 韩语 |
fra | 法语 |
spa | 西班牙语 |
th | 泰语 |
ara | 阿拉伯语 |
ru | 俄语 |
pt | 葡萄牙语 |
de | 德语 |
it | 意大利语 |
el | 希腊语 |
nl | 荷兰语 |
pl | 波兰语 |
bul | 保加利亚语 |
est | 爱沙尼亚语 |
dan | 丹麦语 |
fin | 芬兰语 |
cs | 捷克语 |
rom | 罗马尼亚语 |
slo | 斯洛文尼亚语 |
swe | 瑞典语 |
hu | 匈牙利语 |
cht | 繁体中文 |
vie | 越南语 |
然后进入basetrans的preview里查看百度翻译返回的json数据,可以发现我们需要的翻译在trans->0->dst里面,所以就有了以下的python代码。嗯,一共九行代码,搞定了百度翻译。
import requests
import json
search = input("请输入你要翻译的内容:")
url = "https://fanyi.baidu.com/basetrans"
headers={"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"}
posData={"query":search,"from":"zh","to":"en"}
response = requests.post(url=url,data=posData,headers=headers)
json_data=json.loads(response.content.decode())
print("输入:{0} 翻译:{1}".format(search,json_data["trans"][0]["dst"]))