Python爬虫系列教程之第四篇:数据存储与管理
- 手机
- 2025-09-08 16:54:02

大家好,欢迎继续关注本系列爬虫教程。前几篇博客中,我们依次学习了爬虫的基础知识、数据解析技巧以及应对反爬策略的高级请求方法。在实际爬虫项目中,数据采集只是第一步,如何将提取到的数据进行存储与管理同样非常重要。本篇博客将详细介绍如何将数据保存到CSV文件、JSON文件以及SQLite数据库中,并附上完整的代码示例,代码中均包含详细的中文注释,方便大家理解和学习。
1. 为什么需要数据存储在爬虫开发中,数据存储是将抓取的数据进行持久化的重要步骤。常见的数据存储方式有:
CSV文件:适用于数据量不大且结构化简单的数据,便于数据交换与后续分析。JSON文件:适合存储层次结构较为复杂的数据,具有良好的可读性与跨语言兼容性。数据库(如SQLite、MySQL等):适用于大规模数据存储和复杂查询,具备更高的数据安全性与管理能力。本篇博客将通过一个完整的示例,演示如何从豆瓣电影TOP250页面中抓取电影信息,并将数据分别保存到CSV、JSON以及SQLite数据库中。
2. 完整示例代码
下面的代码示例包含三个主要部分:
数据采集:通过requests和BeautifulSoup爬取豆瓣电影TOP250页面,提取电影名称与评分。数据存储到CSV文件:利用Python自带的csv模块将数据写入CSV文件。数据存储到JSON文件:利用json模块将数据存入JSON文件,格式美观易读。数据存储到SQLite数据库:使用sqlite3模块将数据存入SQLite数据库,便于后续数据查询与管理。注意:运行以下代码前,请确保已安装所需库,如requests、bs4、lxml。可通过命令 pip install requests bs4 lxml 进行安装。
# 导入所需模块 import requests # 用于发送网络请求 from bs4 import BeautifulSoup # 用于解析HTML页面 import csv # 用于CSV文件读写 import json # 用于JSON数据处理 import sqlite3 # 用于SQLite数据库操作 def fetch_douban_top250(url): """ 从豆瓣电影TOP250页面获取电影名称和评分 :param url: 目标页面的URL :return: 包含电影信息的列表,每个元素是一个字典,包含键 'title' 和 'rating' """ # 定义请求头,模拟浏览器行为 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)" } # 发送HTTP请求 response = requests.get(url, headers=headers) # 初始化存储电影信息的列表 movies_list = [] # 如果请求成功,状态码为200,则解析页面内容 if response.status_code == 200: # 使用BeautifulSoup和lxml解析器解析HTML页面 soup = BeautifulSoup(response.text, 'lxml') # 查找所有包含电影信息的div标签,class属性为"item" items = soup.find_all('div', class_='item') # 遍历每个电影信息块 for item in items: # 提取电影名称 title = item.find('span', class_='title').get_text(strip=True) # 提取电影评分 rating = item.find('span', class_='rating_num').get_text(strip=True) # 将提取到的信息以字典形式存入列表 movies_list.append({'title': title, 'rating': rating}) else: print("请求失败,状态码:", response.status_code) return movies_list def save_to_txt(movies, filename): """ 将电影数据保存到TXT文件中 :param movies: 包含电影信息的列表,每个元素为字典 :param filename: TXT文件名 """ with open(filename, "w", encoding="utf-8") as f: for movie in movies: title = movie['title'] rating = movie['rating'] f.write(f"电影:{title},评分:{rating}\n") print(f"数据已成功存储到:{filename}") def save_to_csv(movies, filename): """ 将电影数据保存到CSV文件中 :param movies: 包含电影信息的列表,每个元素为字典 :param filename: CSV文件名 """ # 使用with语句打开文件,确保文件操作完成后自动关闭 with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile: # 定义CSV文件的字段名称 fieldnames = ['title', 'rating'] # 创建CSV字典写入对象 writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 写入表头 writer.writeheader() # 逐行写入每部电影的信息 for movie in movies: writer.writerow(movie) print(f"数据已成功保存到CSV文件:{filename}") def save_to_json(movies, filename): """ 将电影数据保存到JSON文件中 :param movies: 包含电影信息的列表,每个元素为字典 :param filename: JSON文件名 """ # 使用with语句打开文件,确保文件操作完成后自动关闭 with open(filename, 'w', encoding='utf-8') as jsonfile: # 将数据写入文件,ensure_ascii=False保证中文不被转义,indent=4使格式美观 json.dump(movies, jsonfile, ensure_ascii=False, indent=4) print(f"数据已成功保存到JSON文件:{filename}") def save_to_sqlite(movies, db_name): """ 将电影数据保存到SQLite数据库中 :param movies: 包含电影信息的列表,每个元素为字典 :param db_name: SQLite数据库文件名 """ # 连接或创建数据库文件 conn = sqlite3.connect(db_name) # 创建游标对象,用于执行SQL语句 cursor = conn.cursor() # 创建movies表(如果不存在),包含自增id、电影名称和评分 cursor.execute(''' CREATE TABLE IF NOT EXISTS movies ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, rating TEXT ) ''') # 遍历电影数据,将每部电影信息插入到数据库中 for movie in movies: cursor.execute('INSERT INTO movies (title, rating) VALUES (?, ?)', (movie['title'], movie['rating'])) # 提交事务,保存更改 conn mit() # 关闭数据库连接 conn.close() print(f"数据已成功保存到SQLite数据库:{db_name}") if __name__ == '__main__': # 定义目标URL,豆瓣电影TOP250页面 url = ' movie.douban /top250' # 调用函数获取电影数据 movies = fetch_douban_top250(url) # 如果成功获取到数据,则依次保存到CSV、JSON和SQLite数据库 if movies: # 保存到TXT文件 save_to_txt(movies, 'douban_top250.txt') # 保存到CSV文件 save_to_csv(movies, 'douban_top250.csv') # 保存到JSON文件 save_to_json(movies, 'douban_top250.json') # # 保存到SQLite数据库 # save_to_sqlite(movies, 'douban_top250.db') else: print("未能获取到电影数据,请检查请求和页面结构。") 3. 代码解析 3.1 数据采集部分 请求与解析 利用 requests.get 方法向豆瓣电影TOP250页面发送请求,并通过 BeautifulSoup 结合 lxml 解析器解析返回的HTML页面。数据提取 通过查找包含电影信息的<div class="item">标签,提取电影名称和评分,并将每条数据以字典形式存入列表。 3.2 数据存储到CSV CSV写入 使用 csv.DictWriter 写入CSV文件,先写入表头再逐行写入电影数据,确保文件编码为utf-8以防止中文乱码。 3.3 数据存储到JSON JSON写入 利用 json.dump 方法将数据写入JSON文件,通过参数 ensure_ascii=False 保证中文字符不被转义,同时使用 indent=4 美化输出格式。 3.4 数据存储到SQLite 数据库操作 通过 sqlite3 模块连接数据库,如果指定的数据库文件不存在则自动创建。表结构创建 利用SQL语句创建包含id(自增主键)、title和rating字段的movies表。数据插入 遍历电影数据并使用参数化SQL语句将数据逐行插入到表中,最后提交事务并关闭数据库连接。4. 小结
在本篇博客中,我们学习了如何对爬虫抓取到的数据进行多种方式的存储,包括保存到CSV文件、JSON文件以及SQLite数据库中。通过完整的代码示例,希望大家能够实践并灵活运用这些数据存储技术,为后续数据分析与应用打下坚实基础。
如果你对本文内容有疑问或建议,欢迎在评论区留言讨论,也请关注我的CSDN博客获取更多更新内容。记得点赞、收藏和分享哦!
让我们在Python爬虫的道路上不断前进,探索更多高级技术吧!
Python爬虫系列教程之第四篇:数据存储与管理由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python爬虫系列教程之第四篇:数据存储与管理”
上一篇
04运维实用篇(D4_日志)