学习处理JSON、XML、HTML等不同格式的响应数据
JavaScript对象表示法,最常用的数据交换格式
{
"name": "张三",
"age": 25,
"skills": ["Python", "JavaScript"]
}
可扩展标记语言,结构化的数据表示
<user>
<name>张三</name>
<age>25</age>
</user>
超文本标记语言,网页内容的主要格式
<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
解析简单的JSON字符串,提取用户姓名和年龄
json_str = '{"name":"小明","age":18}'
# 目标:提取 name 和 age
从嵌套的JSON中提取深层数据
data = {"user":{"profile":{"email":"test@example.com"}}}
# 目标:提取 email 字段
处理JSON数组,计算所有用户的平均年龄
data = [{"age":25},{"age":30},{"age":35}]
# 目标:计算平均年龄
使用ElementTree解析XML,提取书名和作者
xml = "<book><title>Python入门</title><author>张三</author></book>"
# 目标:提取 title 和 author
使用BeautifulSoup从HTML中提取商品信息
html = '<div class="price">¥99.99</div>'
# 目标:提取价格数字 99.99
将复杂的JSON转换为CSV格式
users = [{"name":"A","age":20},{"name":"B","age":25}]
# 目标:转换为CSV格式
处理包含null或缺失字段的JSON数据
data = [{"name":"A","age":null},{"name":"B"}]
# 目标:处理缺失的age字段
处理分页API的响应数据,提取所有结果
response = {"data":[...],"page":1,"total":100}
# 目标:提取并合并所有分页数据