一、网页分析
目标网址:https://fanyi.baidu.com/
同样的对于这个网页第一步分析:doc中有没有参数
先随便输入一个单词进行查看,发现页面并没有信息,说明是异步请求ajax
控制台点击xhr,将页面重新刷新,并且清空控制台显示的包,再输入单词,可以多测试几个,对比数据
响应的参数中查找到数据
观察路由
通过以上分析:
对于爬虫。第一步永远分析doc中是否直接有数据
如果没有数据的话,一般都是异步请求ajax,另外还有个css文字加密等等,后面遇到再说明
那么目标网页应该为异步接口的网址
再次清空数据包,刷新浏览器
查看响应内容
确认了目标url:
二、代码与实现步骤
import requests
# 什么样的代码是好代码?
def translate_word(word):
'''
翻译单词
:param word: 单词
:return: 中文解释
'''
# 确定url
base_url = 'https://fanyi.baidu.com/sug'
# 准备参数
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'x-requested-with': 'XMLHttpRequest', # 异步请求
'content-length': str(len(word) + 3), # 百度固定
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', # 响应正文 格式
}
data = {
'kw': word,
}
response = requests.post(base_url, headers=headers, data=data)
print(response.json())
# return response.json()
print(type(response.json()))
result = ''
for data in response.json()['data']:
result += data['v'] + '\n'
return result
def main():
# 1、确定翻译内容
word = input('请求输入单词:')
# 2、翻译
result = translate_word(word)
# 3、显示
print(result)
if __name__ == '__main__':
main()
三、结果分析
输入单词,能够正确的翻译,与百度翻译一致