响应数据格式

学习处理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}
# 目标:提取并合并所有分页数据
 

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

输入数据

转换结果