首先确定爬取的网址:https://fanyi.baidu.com/sug
由于百度具有反扒功能所以我们爬取翻译功能时应该伪装我们的头文件即编写headers:
base_url = 'https://fanyi.baidu.com/sug'
kw = input('请输入要查询的单词')
data = {'kw': kw}
headers = {
'content-length': str(len(data)),
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'referer': 'https://fanyi.baidu.com/',
'x-requested-with': 'XMLHttpRequest'
}
然后调用requests库发送请求:
response = requests.post(base_url, headers=headers, data=data)
利用循环将查询到的结果进行输出:
result = ''
for i in response.json()['data']:
result += i['v'] + '\n'
print(key + "的翻译结果为")
print(result)
这样我们就可以得到百度的翻译功能,但是我们只能运行一次使用一次.要想重复使用,便要利用循环以及判断等语句.我们先将上述爬取到的的功能封装成一个方法:
def _fanyi(key):
base_url = 'https://fanyi.baidu.com/sug'
data = {'kw': key}
headers = {
'content-length': str(len(data)),
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'referer': 'https://fanyi.baidu.com/',
'x-requested-with': 'XMLHttpRequest'
}
response = requests.post(base_url, headers=headers, data=data)
result = ''
for i in response.json()['data']:
result += i['v'] + '\n'
print(key + "的翻译结果为")
print(result)
然后另写一个方法进行循环调用,并判断结束:
def main():
# 设置开关命令
tf_list = {'yes', '是', '继续', }
# 设置开关状态,初步设定开关开启
tf = True
while tf:
kw = input("请输入要翻译的单词:")
_fanyi(kw)
# new_tf传递开关信息:关闭或继续开启
new_tf = input("是否继续查询")
if new_tf not in tf_list:
new_tf = False
print("查询结束")
else:
new_tf = True
# 实现信息交换
tf = new_tf
要想更加严谨可以在翻译功能方法中设置判断,判断输入单词是否正确,不正确时进行提醒.完整代码如下:
import requests
def _fanyi(key):
base_url = 'https://fanyi.baidu.com/sug'
data = {'kw': key}
headers = {
'content-length': str(len(data)),
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'referer': 'https://fanyi.baidu.com/',
'x-requested-with': 'XMLHttpRequest'
}
response = requests.post(base_url, headers=headers, data=data)
result = ''
if len(response.json()['data']) == 0:
print("提示:请确认输入的单词/词语是否正确")
else:
for i in response.json()['data']:
result += i['v'] + '\n'
print(key + "的翻译结果为")
print(result)
def main():
tf_list = {'yes', '是', '继续', }
tf = True
while tf:
kw = input("请输入要翻译的单词:")
_fanyi(kw)
new_tf = input("是否继续查询")
if new_tf not in tf_list:
new_tf = False
print("查询结束")
else:
new_tf = True
tf = new_tf
if __name__ == '__main__':
main()
本人学术尚浅,如有错误,请多多指正!
|