【爬虫】案例02:某度翻译数据采集

news/2024/7/19 12:26:39 标签: 爬虫

        使用爬虫实现某度翻译结果数据采集。

        本案例仅供学习交流使用,请勿商用。如涉及版本侵权,请联系我删除。

目录

一、分析页面

二、AJAX请求简介

1. AJAX请求的优势

2. AJAX请求步骤

三、案例练习

四、规范代码


一、分析页面

  1. 在框中输入dog发现,url没有变化,页面刷新方式为局部刷新,请求方式为ajax请求。
  2. 抓包,打开开发者工具,刷新页面,找到返回的json数据包

        可以确定请求的url,请求方式为POST请求,返回的数据类型为JSON数据。

二、AJAX请求简介

1. AJAX请求的优势

         AJAX(Asynchronous JavaScript and XML)请求是一种通过 JavaScript 发送 HTTP 请求到服务器获取数据的技术,使用ajax请求具有以下优势:

  1. 无需刷新整个页面:AJAX 可以在不刷新整个页面的情况下向服务器请求数据并更新页面内容,从而提高用户体验。
  2. 减轻服务器压力:由于 AJAX 只请求需要更新的部分数据,而不是整个页面,因此可以减轻服务器的负担,提高网站的性能和稳定性。
  3. 节省带宽:由于 AJAX 可以通过局部刷新的方式更新页面,因此可以减少不必要的带宽开销,提高页面加载速度。
  4. 提高交互性和可用性:AJAX 可以通过动态更新页面内容和交互操作来提高页面的交互性和可用性,从而更好地满足用户需求。
  5. 支持多种数据格式:AJAX 可以请求和处理多种数据格式,例如 JSON、XML、HTML、文本等,从而可以更灵活地处理服务器返回的数据。
  6. 轻松实现无阻塞异步请求:AJAX 支持无阻塞异步请求,可以在页面不阻塞的情况下向服务器请求数据,从而可以提高用户体验和页面性能。

        总的来说,AJAX 请求是一种强大的前端技术,可以提高页面的交互性、可用性和性能,同时减轻服务器压力和节省带宽。因此,它在现代 Web 开发中得到了广泛应用。

2. AJAX请求步骤

  1. 创建 XMLHttpRequest 对象 要发起 AJAX 请求,需要创建一个 XMLHttpRequest 对象。XMLHttpRequest 是 JavaScript 提供的原生对象,用于在客户端与服务器之间发送请求和接收响应。
  2. 设置请求参数 在创建 XMLHttpRequest 对象后,需要设置请求的一些参数,例如请求方法、请求 URL、是否异步等。
  3. 发送请求 设置请求参数后,就可以使用 XMLHttpRequest 对象发送请求了。
  4. 监听响应 在发送请求后,需要监听 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)


http://www.niftyadmin.cn/n/145466.html

相关文章

15--组件间通信与事件

1、组件间通信与事件1、组件间通信组件间的基本通信方式有以下几种。WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据(自基础库版本 2.0.9 开始,还可以在数据中包含函数)。具体在 组件模板…

从外包辞职6000个小时,到成功入职字节,这些软件测试面试题绝对吊打面试官

简单分享,字节(西瓜视频)测试岗4轮面经没有绝对的天才,只有持续不断的付出。对于我们每 一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2022年7月&#…

【java】为什么要有分布式锁?

文章目录1、为什么要有分布式锁?2、分布式锁特性(五大特性 非常重要)2-1 常见分布式锁的三种实现方式2-2 本文我们主要聊 redis实现分布式锁:3、分布式锁特性2之不会发生死锁3-1 redisLock.unlock() 放在 finally{} 块中就行了吗&…

SpringMvc异常处理机制

1.异常处理机制的思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后 者主要通过规范代码开发、测试等手段减少运行时异常的发生。 系统的Dao、Service、Controller出现都通过throws Except…

盘点:2022年国内排名前10的低代码平台

2022年12月14日,中国科学院主管、科学出版社主办的国家级核心期刊《互联网周刊》联合eNet研究院、德本咨询评选的《2022低代码企业50强》榜单正式公布,简道云位列第一。 目前低代码市场软件类型还是比较多的,不同类型低代码开发平台的侧重点…

基于Arduino平台dmp库+匿名四轴上位机测试MPU6050

基于Arduino平台dmp库+匿名四轴上位机测试MPU6050 📌相关篇《STM32CubeMX配置工程移植dmp库配合匿名四轴上位机三维动态显示测试》✨本内容工程是通过MDK Keil工程移植到Arduino平台,实现通过上位机软件串口端获取MPU6050数据,经过数据转换为3D动态模拟显示,方便在上位机调…

10-CSS-rem适配布局

思考1. 页面布局文字能否随着屏幕大小变化而变化?2. 流式布局和flex布局主要针对于宽度布局,那高度如何设置?3. 怎么样让屏幕发生变化的时候元素高度和宽度等比例缩放?一、rem 基础rem 单位rem (root em)是一个相对单位&#xff0…

LeetCode 543. 二叉树的直径

543. 二叉树的直径 【DFS】首先要想直径长,那么一定是计算两个叶子节点之间的路径。这样就可以递归地去计算以每个节点为根节点时他的最远的两个叶子之前的路径长度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeN…