浅学爬虫-数据存储

在数据爬取完成后,我们需要将数据存储起来,以便于后续的分析和处理。常见的数据存储方式包括存储到CSV文件和存储到数据库。下面我们详细介绍如何实现这些存储方式。

存储到CSV

CSV(Comma-Separated Values)文件是一种常用的文本文件格式,用于存储表格数据。我们可以使用Python的内置csv模块将爬取的数据保存到CSV文件中。

示例:将数据存储到CSV文件

假设我们已经爬取了一些数据,数据结构如下:

python 复制代码
data = [
    {'title': '标题1', 'description': '描述1'},
    {'title': '标题2', 'description': '描述2'},
    {'title': '标题3', 'description': '描述3'}
]

步骤1:编写存储到CSV文件的代码

python 复制代码
import csv

# 数据列表
data = [
    {'title': '标题1', 'description': '描述1'},
    {'title': '标题2', 'description': '描述2'},
    {'title': '标题3', 'description': '描述3'}
]

# CSV文件名
csv_file = 'data.csv'

# 写入数据到CSV文件
with open(csv_file, 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['title', 'description']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

print(f"数据已保存到 {csv_file}")

代码解释:

  1. 数据结构: 定义一个包含字典列表的数据结构。
  2. CSV文件名: 定义要保存的CSV文件名。
  3. 写入数据 : 使用csv.DictWriter创建一个CSV写入对象,写入数据到CSV文件中。

扩展内容:

  • 追加写入模式 : 如果希望将新数据追加到现有CSV文件中,可以使用追加模式('a')打开文件。
python 复制代码
with open(csv_file, 'a', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    for row in data:
        writer.writerow(row)
  • 读取CSV文件 : 可以使用csv.DictReader读取CSV文件中的数据。
python 复制代码
with open(csv_file, 'r', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row)
存储到数据库

数据库是一种高效的数据存储和管理方式。我们可以将数据存储到SQLite或其他关系数据库中。这里我们以SQLite为例,介绍如何将数据存储到数据库中。

示例:将数据存储到SQLite数据库

步骤1:安装SQLite支持库

SQLite是Python内置支持的,所以不需要额外安装。如果使用其他数据库,如MySQL或PostgreSQL,需要安装相应的库。

步骤2:编写存储到SQLite数据库的代码

python 复制代码
import sqlite3

# 数据列表
data = [
    {'title': '标题1', 'description': '描述1'},
    {'title': '标题2', 'description': '描述2'},
    {'title': '标题3', 'description': '描述3'}
]

# 创建数据库连接
conn = sqlite3.connect('data.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS data (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT NOT NULL,
        description TEXT NOT NULL
    )
''')

# 插入数据
for row in data:
    cursor.execute('''
        INSERT INTO data (title, description)
        VALUES (?, ?)
    ''', (row['title'], row['description']))

# 提交事务并关闭连接
conn.commit()
conn.close()

print("数据已保存到 SQLite 数据库")

代码解释:

  1. 创建数据库连接 : 使用sqlite3.connect创建一个数据库连接。
  2. 创建表 : 使用cursor.execute创建一个数据表。
  3. 插入数据 : 使用cursor.execute将数据插入到数据库表中。
  4. 提交事务并关闭连接 : 使用conn.commit提交事务,使用conn.close关闭数据库连接。

扩展内容:

  • 查询数据 : 可以使用SELECT语句从数据库中查询数据。
python 复制代码
conn = sqlite3.connect('data.db')
cursor = conn.cursor()

cursor.execute('SELECT * FROM data')
rows = cursor.fetchall()
for row in rows:
    print(row)

conn.close()
  • 更新数据 : 可以使用UPDATE语句更新数据库中的数据。
python 复制代码
conn = sqlite3.connect('data.db')
cursor = conn.cursor()

cursor.execute('''
    UPDATE data
    SET description = '新的描述'
    WHERE title = '标题1'
''')

conn.commit()
conn.close()
  • 删除数据 : 可以使用DELETE语句删除数据库中的数据。
python 复制代码
conn = sqlite3.connect('data.db')
cursor = conn.cursor()

cursor.execute('''
    DELETE FROM data
    WHERE title = '标题3'
''')

conn.commit()
conn.close()
结论

本文详细介绍了如何将爬取的数据存储到CSV文件和SQLite数据库中。这些方法将帮助我们更好地管理和分析数据。CSV文件适合于存储结构简单且不需要频繁更新的数据,而数据库则适用于需要高效查询和管理的大规模数据。在下一篇文章中,我们将探讨更多数据存储和处理的高级技术

相关推荐
wanhengidc1 小时前
私有云具体是指什么
服务器·网络·游戏·智能手机·云计算
霖霖总总1 小时前
[小技巧69]为什么总说MySQL单表“别超 2000 万行”?一篇讲透 InnoDB 存储极限
数据库·mysql
A星空1231 小时前
三、Kconfig介绍以及制作menuconfig界面
linux·运维·服务器
爱上妖精的尾巴1 小时前
8-10 WPS JSA 正则表达式:贪婪匹配
服务器·前端·javascript·正则表达式·wps·jsa
安科士andxe1 小时前
实操指南|安科士1.25G CWDM SFP光模块选型、部署与运维全攻略
运维·数据库·5g
Java爱好狂.2 小时前
RDB&AOF持久化原理解析
java·数据库·redis·后端开发·java编程·java程序员·java八股文
蓝胖子Lcl2 小时前
Mac安装Oracle数据库(M芯片)
数据库·macos·oracle
砚边数影2 小时前
从文档型数据库到企业级数据平台:一次架构演进的思考与实践
数据库·mongodb·架构·kingbase·数据库平替用金仓·金仓数据库
SQL必知必会2 小时前
SQL 删除重复行完全指南
数据库·sql
工业甲酰苯胺2 小时前
spring-事务管理
数据库·sql·spring