尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

代码实例:Python 爬虫抓取与解析 JSON 数据 - 实践

代码实例:Python 爬虫抓取与解析 JSON 数据 - 实践
📅 发布时间:2026/6/20 9:18:31

在现代网络爬虫开发中,JSON 数据格式因其简洁和易于解析的特性而被广泛使用。许多网站和 API 都提供 JSON 格式的响应数据,这使得爬取和解析 JSON 数据成为爬虫开发中的一个重要技能。本文将详细介绍如何使用 Python 爬虫抓取和解析 JSON 数据,包括基本概念、常用工具和完整的代码实例。

一、JSON 数据格式简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON 数据通常以键值对的形式组织,支持以下几种数据类型:

  • 字符串:用双引号括起来的文本。

  • 数字:整数或浮点数。

  • 布尔值:true 或 false。

  • 数组:用方括号括起来的有序数据集合。

  • 对象:用花括号括起来的键值对集合。

以下是一个简单的 JSON 示例:

{"name": "John Doe","age": 30,"is_student": false,"courses": ["Math", "Science", "History"],"address": {"street": "123 Main St","city": "Anytown","state": "CA"}
}

二、Python 爬虫抓取 JSON 数据

(一)使用 requests 库

requests 是 Python 中最常用的 HTTP 库之一,用于发送 HTTP 请求。它支持多种请求方法(如 GET、POST、PUT、DELETE 等),并且可以方便地处理 JSON 数据。

以下是一个使用 requests 库抓取 JSON 数据的示例:

import requests
# 目标 URL
url = "https://api.example.com/data"
# 发送 GET 请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:# 将响应内容解析为 JSONdata = response.json()print(data)
else:print(f"请求失败,状态码:{response.status_code}")

(二)处理请求参数

在实际应用中,你可能需要向 API 传递参数,如查询字符串或请求体。requests 库允许你通过 params 和 json 参数方便地处理这些情况。

以下是一个示例,展示如何向 API 传递查询字符串和 JSON 请求体:

import requests
# 目标 URL
url = "https://api.example.com/data"
# 查询字符串参数
params = {"key1": "value1","key2": "value2"
}
# JSON 请求体
json_data = {"name": "John Doe","age": 30
}
# 发送 POST 请求
response = requests.post(url, params=params, json=json_data)
# 检查请求是否成功
if response.status_code == 200:# 将响应内容解析为 JSONdata = response.json()print(data)
else:print(f"请求失败,状态码:{response.status_code}")

三、解析 JSON 数据

(一)使用 json 模块

Python 的标准库中提供了 json 模块,用于解析和生成 JSON 数据。json.loads() 方法可以将 JSON 字符串解析为 Python 对象,而 json.dumps() 方法可以将 Python 对象转换为 JSON 字符串。

以下是一个解析 JSON 数据的示例:

import json
# JSON 字符串
json_str = '''
{"name": "John Doe","age": 30,"is_student": false,"courses": ["Math", "Science", "History"],"address": {"street": "123 Main St","city": "Anytown","state": "CA"}
}
'''
# 将 JSON 字符串解析为 Python 对象
data = json.loads(json_str)
# 访问解析后的数据
print("Name:", data["name"])
print("Age:", data["age"])
print("Courses:", data["courses"])
print("Address:", data["address"]["street"], data["address"]["city"], data["address"]["state"])

(二)处理嵌套数据

JSON 数据通常包含嵌套结构,如对象和数组。在 Python 中,嵌套的 JSON 数据会转换为嵌套的字典和列表。你可以通过多级索引访问嵌套数据。

以下是一个处理嵌套 JSON 数据的示例:

import json
# JSON 字符串
json_str = '''
{"name": "John Doe","age": 30,"is_student": false,"courses": ["Math", "Science", "History"],"address": {"street": "123 Main St","city": "Anytown","state": "CA"}
}
'''
# 将 JSON 字符串解析为 Python 对象
data = json.loads(json_str)
# 访问嵌套数据
print("Name:", data["name"])
print("Age:", data["age"])
print("Courses:", data["courses"])
print("Address:", data["address"]["street"], data["address"]["city"], data["address"]["state"])

四、完整代码实例

以下是一个完整的代码实例,展示如何使用 Python 爬虫抓取和解析 JSON 数据:

(一)抓取 JSON 数据

import requests
# 目标 URL
url = "https://api.example.com/data"
# 发送 GET 请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:# 将响应内容解析为 JSONdata = response.json()print(data)
else:print(f"请求失败,状态码:{response.status_code}")

(二)解析 JSON 数据

import json
# JSON 字符串
json_str = '''
{"name": "John Doe","age": 30,"is_student": false,"courses": ["Math", "Science", "History"],"address": {"street": "123 Main St","city": "Anytown","state": "CA"}
}
'''
# 将 JSON 字符串解析为 Python 对象
data = json.loads(json_str)
# 访问解析后的数据
print("Name:", data["name"])
print("Age:", data["age"])
print("Courses:", data["courses"])
print("Address:", data["address"]["street"], data["address"]["city"], data["address"]["state"])

五、常见问题与解决方法

(一)请求失败

问题:请求失败,返回非 200 状态码。 解决方法:

  • 检查 URL 是否正确。

  • 检查请求参数是否正确。

  • 检查 API 是否需要认证(如 API Key)。

  • 检查网络连接是否正常。

(二)JSON 解析错误

问题:解析 JSON 数据时出现错误。 解决方法:

  • 确保响应内容是有效的 JSON 格式。

  • 检查 JSON 字符串是否符合 JSON 规范。

  • 使用 try-except 块捕获解析错误。

(三)数据访问错误

问题:访问 JSON 数据时出现 KeyError 或 IndexError。 解决方法:

  • 确保访问的键或索引存在于数据中。

  • 使用 get() 方法访问字典键,避免 KeyError。

  • 使用 try-except 块捕获访问错误。

六、最佳实践

(一)错误处理

在爬虫开发中,错误处理是必不可少的。使用 try-except 块捕获可能的错误,并记录错误信息,以便后续排查问题。

import requests
# 目标 URL
url = "https://api.example.com/data"
try:# 发送 GET 请求response = requests.get(url)response.raise_for_status()  # 检查请求是否成功# 将响应内容解析为 JSONdata = response.json()print(data)
except requests.exceptions.RequestException as e:print(f"请求失败: {e}")
except json.JSONDecodeError as e:print(f"JSON 解析失败: {e}")

(二)日志记录

在爬虫开发中,日志记录是非常重要的。使用 Python 的 logging 模块记录请求和解析过程中的信息,便于后续排查问题。

import requests
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 目标 URL
url = "https://api.example.com/data"
try:# 发送 GET 请求response = requests.get(url)response.raise_for_status()  # 检查请求是否成功# 将

响应内容解析为 JSON data = response.json() logging.info("请求成功,数据如下:") logging.info(data) except requests.exceptions.RequestException as e: logging.error(f"请求失败: {e}") except json.JSONDecodeError as e: logging.error(f"JSON 解析失败: {e}")

### (三)数据缓存
为了提高爬虫的效率,可以将抓取的数据缓存到本地文件或数据库中,避免重复请求。
```python
import requests
import json
import os
# 目标 URL
url = "https://api.example.com/data"
# 缓存文件路径
cache_file = "data.json"
# 检查缓存文件是否存在
if os.path.exists(cache_file):with open(cache_file, "r") as f:data = json.load(f)logging.info("从缓存文件加载数据")
else:try:# 发送 GET 请求response = requests.get(url)response.raise_for_status()  # 检查请求是否成功# 将响应内容解析为 JSONdata = response.json()# 将数据缓存到文件with open(cache_file, "w") as f:json.dump(data, f)logging.info("请求成功,数据已缓存")except requests.exceptions.RequestException as e:logging.error(f"请求失败: {e}")except json.JSONDecodeError as e:logging.error(f"JSON 解析失败: {e}")

七、总结

通过本文的介绍,你应该已经掌握了如何使用 Python 爬虫抓取和解析 JSON 数据。通过 requests 库发送 HTTP 请求并获取 JSON 数据,再使用 json 模块解析数据,你可以轻松地处理各种 JSON 格式的数据。在实际开发中,注意错误处理、日志记录和数据缓存等最佳实践,可以提高爬虫的稳定性和效率。

相关新闻

  • 2025年11月上海老房翻新公司排名榜:十家口碑对比与选择指南
  • 2025年11月油烟机品牌排行:从静音到变频五大机型实测评价
  • vue3+vite使用 tailwindcss.css搭建

最新新闻

  • 如何彻底解决Windows C盘爆红问题:终极清理工具使用指南
  • 终极指南:如何通过FanControl实现Windows系统风扇精准控制与静音优化
  • p056基于spark的短视频推荐系统的设计与实现1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码
  • 本地AI Agent选型指南:无GPU、断网、零运维场景下的四大框架实测
  • Legacy iOS Kit终极指南:免费解锁旧iPhone/iPad完整控制权
  • 五艘无人艇分布式围捕编队控制仿真研究(Matlab代码实现)

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号