今天我们来写一个可以自动翻译词语的脚本,其原理就是用python来模拟浏览器访问百度翻译,下面来分析一下原网页百度翻译
当我们输入词语时,导航栏不变化、网页不刷新就会自动显示翻译结果
由此我们可以推测该过程浏览器进行了一次Ajax请求,下面来分析具体分析一下请求过程:
按F12进入开发者模式
重新输入词语并观察网页请求,
当我们一个一个去观察请求时,发现该请求即为我们所要的结果:
查看该响应的请求头:
提交的表单为{‘kw’:花} (花是我们要查询的词语)
那么我们用爬虫来实现这一过程:
user-agent
代码如下
import requests # 导入requests模块
import pprint #导入pprint ,可以美化输出,也可以用print
url = 'https://fanyi.baidu.com/sug' #请求url
# 构造头部信息,该信息可以将我们的脚本伪装成浏览器访问
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
}
#提交的表单数据,我们假设要查的词语是 花
data={'kw':'花'}
# 开始请求,为POST请求
response=requests.post(url=url,headers=headers,data=data)
#打印响应内容
if response.status_code==200:
pprint.pprint(response.json())
响应结果如下:
观察输出结果可以发现输出结果为字典格式。键(key)为data,值(value)为列表,而列表的每一个元素又是一个字典,键'k'对应的是我们要查询的词语,‘v'对应的是查询结果,但结果中有方括号括起来的拼音,这一部分是我们不需要的,下面我们对结果进行提取:
import requests # 导入requests模块
import pprint #导入pprint ,可以美化输出,也可以用print
#确定字符串中括号的下表
def find_kuohao(string):
string=list(string)
count=0
if ']' in string:
for item in string:
if item == ']':
break
else:
count=count+1
return count
else:
return count
#去除结果中的拼音
def remove_pingyin(string):
num=find_kuohao(string=string)
return string[num+1:]
url = 'https://fanyi.baidu.com/sug' #请求url
# 构造头部信息,该信息可以将我们的脚本伪装成浏览器访问
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
}
#提交的表单数据,我们假设要查的词语是 花
data={'kw':'花'}
# 开始请求,为POST请求
response=requests.post(url=url,headers=headers,data=data)
#打印响应内容
if response.status_code==200:
result=response.json()
translation = result['data'][0]
submit = translation['k']
receive = translation['v'].split(';')
print('您查询的词语是:', submit)
print('查询结果是:')
for i in receive:
if i is not '':
res = remove_pingyin(i)
print(res)
运行结果如下:
我们再次对代码进行改进,使得它可以进行连续查词,并且可以随时进行退出:改进结果如下:
import requests
def find_kuohao(string):
string=list(string)
count=0
if ']' in string:
for item in string:
if item == ']':
break
else:
count=count+1
return count
else:
return count
def remove_pingyin(string):
num=find_kuohao(string=string)
return string[num+1:]
if __name__=="__main__":
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
}
url = 'https://fanyi.baidu.com/sug'
while True:
word=input('请输入要查询的单词,结束查询按q\n')
if word is 'q':
print('谢谢查询!')
break
else:
data={'kw':word}
response = requests.post(url=url, headers=headers, data=data)
result = response.json()
try:
translation = result['data'][0]
submit = translation['k']
receive = translation['v'].split(';')
print('您查询的词语是:', submit)
print('查询结果是:')
for i in receive:
if i is not '':
res = remove_pingyin(i)
print(res)
except:
print('查询无果,请核对后再试。。。。')
运行一下:
(工具:python3.7.4+Pycharm2019.2)
代码截止2020.2.2运行无误!
390

被折叠的 条评论
为什么被折叠?



