Python爬虫系列教程之第十篇:爬虫数据清洗与存储到MySQL数据库

大家好,欢迎继续关注本系列爬虫教程!在前面的几篇博客中,我们介绍了爬虫的基本原理、如何处理反爬机制、如何实现异步爬虫、如何爬取API数据等内容。然而,当我们抓取到的数据量越来越大时,数据的存储与管理就成为了一个不可忽视的问题。

在本篇博客中,我们将探讨如何对爬虫抓取的数据进行数据清洗,并将数据存储到MySQL数据库中,便于后续的分析与管理。具体内容包括:

  • 数据清洗:去除无用数据、处理缺失值、格式化数据等。
  • 数据存储:如何将清洗后的数据存储到MySQL数据库。

1. 数据清洗概述

数据清洗是指在数据分析的过程中,对原始数据进行处理,去除冗余、无效或者不完整的数据,使得数据更加符合分析要求,便于后续的处理与使用。常见的数据清洗任务包括:

  • 去除重复数据:确保每条数据在数据集中唯一。
  • 处理缺失值:填充、删除或者插值缺失的数据。
  • 数据格式化:将日期、时间、数字等数据格式统一。
  • 去除无关数据:剔除对分析没有意义的数据。

1.1 为什么需要数据清洗?

抓取到的数据往往是“脏数据”,存在很多不完整、不规范或者重复的内容。未经清洗的数据不仅会影响分析的准确性,还可能导致存储和查询性能的下降。因此,数据清洗是数据处理流程中不可或缺的步骤。


2. 使用 pandas 进行数据清洗

在 Python 中,pandas 是一个非常强大的数据分析库,它提供了丰富的工具来进行数据清洗。我们可以通过 pandas 方便地处理缺失值、去除重复数据、格式化数据等。

2.1 安装 pandas

首先,需要安装 pandas 库:

pip install pandas

2.2 清洗数据示例

假设我们抓取的数据是豆瓣电影的名称和评分,以下是如何使用 pandas 对数据进行清洗的示例。

import pandas as pd

# 模拟爬虫抓取的数据
data = [
    {"title": "电影A", "rating": 9.2},
    {"title": "电影B", "rating": 8.5},
    {"title": "电影C", "rating": 8.8},
    {"title": "电影D", "rating": None},  # 缺失评分
    {"title": "电影E", "rating": 9.0},
    {"title": "电影A", "rating": 9.2},  # 重复数据
]

# 创建DataFrame
df = pd.DataFrame(data)

# 显示原始数据
print("原始数据:")
print(df)

# 1. 去除重复数据
df = df.drop_duplicates(subset=["title"])

# 2. 处理缺失值:填充缺失评分为平均值
df["rating"].fillna(df["rating"].mean(), inplace=True)

# 3. 格式化数据:确保评分是浮动类型
df["rating"] = df["rating"].astype(float)

# 显示清洗后的数据
print("\n清洗后的数据:")
print(df)

2.3 代码解析

  • 去重df.drop_duplicates(subset=["title"]) 去除重复的电影数据,以电影名称为标准。
  • 处理缺失值df["rating"].fillna(df["rating"].mean(), inplace=True) 将缺失的评分数据用平均值填充。
  • 数据格式化df["rating"] = df["rating"].astype(float) 确保评分字段的数据类型是 float

执行该代码后,输出结果如下:

原始数据:
   title  rating
0  电影A     9.2
1  电影B     8.5
2  电影C     8.8
3  电影D     NaN
4  电影E     9.0
5  电影A     9.2

清洗后的数据:
   title  rating
0  电影A     9.2
1  电影B     8.5
2  电影C     8.8
4  电影E     9.0
3  电影D     8.875

3. 将数据存储到MySQL数据库

接下来,我们将清洗后的数据存储到 MySQL 数据库中。我们将使用 pymysql 库连接数据库,并将数据插入到指定的表中。

3.1 安装 pymysql

首先,我们需要安装 pymysql 库,它是一个连接 MySQL 数据库的客户端:

pip install pymysql

3.2 创建 MySQL 数据库和表

在存储数据之前,首先需要在 MySQL 中创建数据库和表。假设我们创建一个名为 movies 的数据库,表格 movie_data 存储电影信息,表结构如下:

CREATE DATABASE movies;
USE movies;

CREATE TABLE movie_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    rating FLOAT
);

3.3 将清洗后的数据存储到 MySQL

接下来,我们将清洗后的数据插入到 movie_data 表中:

import pymysql

# MySQL数据库连接配置
db = pymysql.connect(
    host="localhost",
    user="root",
    password="your_password",
    database="movies"
)

cursor = db.cursor()

# 插入数据
for index, row in df.iterrows():
    title = row["title"]
    rating = row["rating"]

    # 插入SQL语句
    sql = f"INSERT INTO movie_data (title, rating) VALUES ('{title}', {rating})"
    cursor.execute(sql)

# 提交事务
db.commit()

# 关闭连接
cursor.close()
db.close()

print("数据已成功存储到MySQL数据库")

3.4 代码解析

  • 数据库连接pymysql.connect() 连接到 MySQL 数据库。根据你的数据库配置,替换相应的 hostuserpassworddatabase 参数。
  • 插入数据:通过 cursor.execute(sql) 执行插入 SQL 语句,将每条电影数据插入数据库。
  • 提交事务db.commit() 提交数据事务,确保数据保存到数据库。
  • 关闭连接:最后,通过 cursor.close()db.close() 关闭游标和数据库连接。

执行该代码后,数据将成功存储到 MySQL 数据库的 movie_data 表中。


4. 小结

在本篇博客中,我们介绍了如何对爬虫抓取的数据进行数据清洗,并将清洗后的数据存储到 MySQL 数据库。具体内容包括:

  • 使用 pandas 进行数据清洗,包括去除重复数据、处理缺失值、格式化数据等。
  • 使用 pymysql 库将数据插入到 MySQL 数据库。

数据清洗和存储是数据爬取中的重要环节,确保了数据的整洁性和可用性。如果你在实际爬虫项目中处理大量数据,数据清洗和存储的效率至关重要。

希望本篇博客能够帮助你理解数据清洗和数据库存储的基本流程。如果你有任何问题或建议,欢迎在评论区留言讨论!别忘了点赞、收藏并分享给需要的朋友!我们下篇博客再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放氮气的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值