使用爬虫实现某度翻译结果数据采集。
本案例仅供学习交流使用,请勿商用。如涉及版本侵权,请联系我删除。
目录
一、分析页面
二、AJAX请求简介
1. AJAX请求的优势
2. AJAX请求步骤
三、案例练习
四、规范代码
一、分析页面
- 在框中输入dog发现,url没有变化,页面刷新方式为局部刷新,请求方式为ajax请求。
- 抓包,打开开发者工具,刷新页面,找到返回的json数据包
可以确定请求的url,请求方式为POST请求,返回的数据类型为JSON数据。
二、AJAX请求简介
1. AJAX请求的优势
AJAX(Asynchronous JavaScript and XML)请求是一种通过 JavaScript 发送 HTTP 请求到服务器获取数据的技术,使用ajax请求具有以下优势:
- 无需刷新整个页面:AJAX 可以在不刷新整个页面的情况下向服务器请求数据并更新页面内容,从而提高用户体验。
- 减轻服务器压力:由于 AJAX 只请求需要更新的部分数据,而不是整个页面,因此可以减轻服务器的负担,提高网站的性能和稳定性。
- 节省带宽:由于 AJAX 可以通过局部刷新的方式更新页面,因此可以减少不必要的带宽开销,提高页面加载速度。
- 提高交互性和可用性:AJAX 可以通过动态更新页面内容和交互操作来提高页面的交互性和可用性,从而更好地满足用户需求。
- 支持多种数据格式:AJAX 可以请求和处理多种数据格式,例如 JSON、XML、HTML、文本等,从而可以更灵活地处理服务器返回的数据。
- 轻松实现无阻塞异步请求:AJAX 支持无阻塞异步请求,可以在页面不阻塞的情况下向服务器请求数据,从而可以提高用户体验和页面性能。
总的来说,AJAX 请求是一种强大的前端技术,可以提高页面的交互性、可用性和性能,同时减轻服务器压力和节省带宽。因此,它在现代 Web 开发中得到了广泛应用。
2. AJAX请求步骤
- 创建 XMLHttpRequest 对象 要发起 AJAX 请求,需要创建一个 XMLHttpRequest 对象。XMLHttpRequest 是 JavaScript 提供的原生对象,用于在客户端与服务器之间发送请求和接收响应。
- 设置请求参数 在创建 XMLHttpRequest 对象后,需要设置请求的一些参数,例如请求方法、请求 URL、是否异步等。
- 发送请求 设置请求参数后,就可以使用 XMLHttpRequest 对象发送请求了。
- 监听响应 在发送请求后,需要监听 XMLHttpRequest 对象的 readyState 和 status 属性,以判断请求是否成功并获取响应数据。
三、案例练习
import requests
url = r'https://fanyi.baidu.com/sug'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
while True:
word = input('Enter a Word: ')
data = {'kw': word}
response = requests.post(url=url, data=data, headers=headers, verify=False)
dic_obj = response.json()
file_name = f'{word}.json'
with open(file_name, 'w', encoding='utf-8') as fp:
json.dump(dic_obj, fp=fp, ensure_ascii=False)
for dic in dic_obj['data']:
key_word = dic['k']
explain = dic['v']
print(key_word, explain)
四、规范代码
import requests
def translate_word(word):
"""
将输入的单词翻译成中文,并返回翻译结果列表
参数:
word (str) -- 需要翻译的单词
返回值:
result_list (list) -- 包含翻译结果的列表,每个元素为一个字符串,格式为“单词:翻译”
异常:
如果翻译过程中出现了异常,将抛出异常 requests.exceptions.RequestException
"""
# 设置请求URL和请求头
url = r'https://fanyi.baidu.com/sug'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
# 将单词存储到字典对象data中
data = {'kw': word}
# 向某度翻译发送POST请求,获取响应
response = requests.post(url=url, data=data, headers=headers, verify=False)
# 将响应内容解析成字典对象
dic_obj = response.json()
# 输出翻译结果
result_list = []
for dic in dic_obj['data']:
# 获取单词和翻译
key_word = dic['k']
explain = dic['v']
# 格式化输出
result_list.append(f"{key_word}:{explain}")
# 返回翻译结果
return result_list
def main():
word = input('Enter a Word: ')
results = translate_word(word)
for result in results:
print(result)