在 Python 爬虫中,数据存储是一个重要的环节,它涉及到将爬取的数据保存到某种持久化存储介质中,以便于后续的分析和处理。以下是几种常见的数据存储方式及其原理和代码示例:
1. 文件存储
原理:将数据直接写入到文件中,如文本文件、CSV 文件等。
代码示例(保存为 CSV):
import csv
# 假设有一个列表,包含多个字典,每个字典代表一条数据
data = [
{
'name': 'John', 'age': 30, 'city': 'New York'},
{
'name': 'Anna', 'age': 22, 'city': 'Los Angeles'},
]
# 写入 CSV 文件
with open('people.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
2. 关系型数据库存储
原理:将数据存储到关系型数据库中,如 MySQL、PostgreSQL 等,通过表结构来组织数据。
代码示例(使用 SQLite):
import sqlite3
# 连接到 SQLite 数据库
# 如果文件不存在,会自动在当前目录创建一个数据库文件
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建一个表
cursor.execute('''
CREATE TABLE IF NOT EXISTS people (
name TEXT,
age INTEGER,
city TEXT
)
''')
# 插入数据
data = [
('John', 30, 'New York'),
('Anna', 22, 'Los Angeles'),
]
cursor.executemany('INSERT INTO people (name, age, city) VALUES (?, ?, ?)', data)
# 提交事务
conn.commit()
# 关闭连接
conn.close()
3. 非关系型数据库存储(NoSQL)
原理:将数据存储到非关系型数据库中,如 MongoDB、Redis 等,这些数据库通常更加灵活,不需要固定的表结构。
代码示例(使用 MongoDB):
from pymongo import MongoClient
# 连接到 MongoDB
client = MongoClient('localhost', 27017)
# 选择数据库
db = client['mydatabase']
# 选择集合
collection = db['people']
# 插入数据
data = [
{
'name': 'John', 'age': 30, 'city': 'New York'},
{
'name': 'Anna', 'age': 22, 'city': 'Los Angeles'},
]
collection.insert_many(data)
4. 使用 Pandas 库
原理:Pandas 是一个数据分析库,它提供了 DataFrame 对象,可以方便地处理和存储数据。
代码示例:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'name': ['John', 'Anna'],
'age': [30, 22],
'city': ['New York', 'Los Angeles'],
})
# 保存到 CSV 文件
df.to_csv('people.csv', index=False)
# 保存到 SQL 数据库
df.to_sql('people', conn, if_exists='replace', index=False)
5. 存储为 JSON
原理:JSON 是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。
代码示例:
import json
# 假设有一个字典或列表包含数据
data = [
{
'name': 'John', 'age': 30, 'city': 'New York'},
{
'name': 'Anna', 'age': 22, 'city': 'Los Angeles'},
]
# 将数据写入 JSON 文件
with open('people.json', 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
每种存储方式都有其适用场景。文件存储简单易用,适合小型项目或一次性任务。关系型数据库和非关系型数据库适用于需要复杂查询和大规模数据存储的场景。 。