响应数据格式

学习处理JSON、XML、HTML等不同格式的响应数据

核心概念

JSON格式

JavaScript对象表示法,最常用的数据交换格式

{ "name": "张三", "age": 25, "skills": ["Python", "JavaScript"] }

XML格式

可扩展标记语言,结构化的数据表示

<user> <name>张三</name> <age>25</age> </user>

HTML格式

超文本标记语言,网页内容的主要格式

<div class="user"> <h2>张三</h2> <span>25岁</span> </div>

故事化案例:小华的新闻数据提取

小华需要从一个新闻网站提取最新的科技新闻,该网站提供了JSON格式的API接口。 但是返回的数据格式比较复杂,包含了嵌套的对象和数组。

原始数据格式

{
    "status": "success",
    "articles": [
        {
            "id": 123,
            "title": "AI技术新突破",
            "author": {
                "name": "科技记者",
                "email": "tech@news.com"
            },
            "tags": ["AI", "科技", "创新"]
        }
    ]
}
                                

提取后的数据

[{
    "id": 123,
    "title": "AI技术新突破",
    "author": "科技记者",
    "tags": "AI,科技,创新"
}]
                                
# 小华的数据提取方案
import requests
import json

def extract_news():
    url = "https://api.news.com/tech"
    headers = {"User-Agent": "NewsBot/1.0"}
    
    response = requests.get(url, headers=headers)
    data = response.json()
    
    # 提取关键信息
    articles = []
    for article in data.get('articles', []):
        articles.append({
            'id': article['id'],
            'title': article['title'],
            'author': article['author']['name'],
            'tags': ','.join(article['tags'])
        })
    
    return articles
                        

8个练习题

练习1:JSON解析基础

解析简单的JSON字符串,提取用户姓名和年龄

json_str = '{"name":"小明","age":18}'
# 目标:提取 name 和 age
                        

练习2:嵌套JSON提取

从嵌套的JSON中提取深层数据

data = {"user":{"profile":{"email":"test@example.com"}}}
# 目标:提取 email 字段
                        

练习3:数组数据处理

处理JSON数组,计算所有用户的平均年龄

data = [{"age":25},{"age":30},{"age":35}]
# 目标:计算平均年龄
                        

练习4:XML解析

使用ElementTree解析XML,提取书名和作者

xml = "<book><title>Python入门</title><author>张三</author></book>"
# 目标:提取 title 和 author
                        

练习5:HTML数据提取

使用BeautifulSoup从HTML中提取商品信息

html = '<div class="price">¥99.99</div>'
# 目标:提取价格数字 99.99
                        

练习6:数据格式转换

将复杂的JSON转换为CSV格式

users = [{"name":"A","age":20},{"name":"B","age":25}]
# 目标:转换为CSV格式
                        

练习7:错误数据处理

处理包含null或缺失字段的JSON数据

data = [{"name":"A","age":null},{"name":"B"}]
# 目标:处理缺失的age字段
                        

练习8:API响应处理

处理分页API的响应数据,提取所有结果

response = {"data":[...],"page":1,"total":100}
# 目标:提取并合并所有分页数据
                        

互动练习:数据格式转换器

输入数据

转换结果