【愚公系列】《Python网络爬虫从入门到精通》039-MySQL数据库

举报
愚公搬代码 发表于 2025/05/06 22:30:26 2025/05/06
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在网络爬虫的世界中,数据的存储与管理是成功的关键环节。随着爬虫技术的不断发展,抓取的数据量也日益增大,如何高效、可靠地存储这些数据成为了开发者必须面对的挑战。MySQL数据库,作为一种广泛使用的关系型数据库,以其强大的数据管理能力和灵活的查询功能,成为了爬虫项目中最受欢迎的选择之一。

我们将深入探讨如何在网络爬虫中使用MySQL数据库。我们将从MySQL的基本概念入手,逐步引导你了解如何在Python中连接和操作MySQL数据库,包括创建数据库、设计数据表、插入和查询数据等实用技巧。通过具体的示例,你将掌握如何将抓取到的数据高效地存储到MySQL中,并能够灵活地进行数据查询和分析。

🚀一、MySQL数据库

🔎1.安装 PyMySQL

步骤说明:

  1. 背景需求:

    • MySQL 以独立进程运行,需通过 Python 驱动连接。
    • PyMySQL 是符合 Python DB-API 规范的轻量级 MySQL 驱动。
  2. 安装方法:
    在命令行中执行以下命令:

    pip install PyMySQL  
    
    • 安装完成后可通过 import pymysql 验证是否成功。
在这里插入图片描述在这里插入图片描述

🔎2.连接数据库

核心步骤与代码示例:

import pymysql  

# 打开数据库连接(参数顺序:主机/IP、用户名、密码、数据库名)  
db = pymysql.connect(  
    host="localhost",  
    user="root",  
    password="root",  
    database="mrsoft"  
)  

# 创建游标对象  
cursor = db.cursor()  

# 执行 SQL 查询(获取数据库版本)  
cursor.execute("SELECT VERSION()")  
data = cursor.fetchone()  
print("Database version: %s" % data)  

# 关闭连接  
db.close()  

注意事项:

  • connect() 参数需与本地 MySQL 配置一致(如用户名、密码、数据库名)。
  • 操作结束后必须调用 close() 释放资源。
在这里插入图片描述在这里插入图片描述

🔎3.创建数据表

SQL 语句与代码实现:

  1. 删除旧表(若存在):

    DROP TABLE IF EXISTS books;  
    
  2. 创建新表语句:

    CREATE TABLE books (  
        id INT(8) NOT NULL AUTO_INCREMENT,  
        name VARCHAR(50) NOT NULL,  
        category VARCHAR(50) NOT NULL,  
        price DECIMAL(10,2) DEFAULT NULL,  
        publish_time DATE DEFAULT NULL,  
        PRIMARY KEY (id)  
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  
    
  3. Python 代码实现:

    import pymysql  
    
    db = pymysql.connect(  
        host="localhost",  
        user="root",  
        password="root",  
        database="mrsoft"  
    )  
    cursor = db.cursor()  
    
    # 删除旧表  
    cursor.execute("DROP TABLE IF EXISTS books")  
    
    # 创建新表  
    sql = """  
        CREATE TABLE books (  
            id INT(8) NOT NULL AUTO_INCREMENT,  
            name VARCHAR(50) NOT NULL,  
            category VARCHAR(50) NOT NULL,  
            price DECIMAL(10,2) DEFAULT NULL,  
            publish_time DATE DEFAULT NULL,  
            PRIMARY KEY (id)  
        ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  
    """  
    cursor.execute(sql)  
    db.close()  
    

关键点:

  • 字段 AUTO_INCREMENT 需正确拼写。
  • DECIMAL(10,2) 表示最多 10 位数字,其中 2 位小数。
  • 指定 CHARSET=utf8 支持中文字段。
在这里插入图片描述在这里插入图片描述

🔎4.操作 MySQL 数据表

批量插入数据示例:

import pymysql  

db = pymysql.connect(  
    host="localhost",  
    user="root",  
    password="root",  
    database="mrsoft",  
    charset="utf8"  # 防止中文乱码  
)  
cursor = db.cursor()  

# 数据列表(多组元组)  
data = [  
    ("零基础学 Python", "Python", 79.80, "2018-5-20"),  
    ("Python 从入门到精通", "Python", 69.80, "2018-6-18"),  
    ("零基础学 PHP", "PHP", 69.80, "2017-5-21"),  
    ("PHP 项目开发实战入门", "PHP", 79.80, "2016-5-21"),  
    ("零基础学 Java", "Java", 69.80, "2017-5-21")  
]  

try:  
    # 使用 executemany 批量插入  
    cursor.executemany(  
        "INSERT INTO books (name, category, price, publish_time) VALUES (%s, %s, %s, %s)",  
        data  
    )  
    db.commit()  # 提交事务  
except Exception as e:  
    print("插入失败:", e)  
    db.rollback()  # 回滚事务  
finally:  
    db.close()  
在这里插入图片描述在这里插入图片描述

注意事项:

  1. 防 SQL 注入:使用 %s 占位符而非字符串拼接。
  2. 字符集设置:连接时指定 charset="utf8" 确保中文正确存储。
  3. 事务管理:
    • 成功时 commit() 提交更改。
    • 失败时 rollback() 回滚至操作前状态。
  4. 资源释放:始终在 finally 中关闭连接。

🔎5.总结

  • PyMySQL 核心流程:安装驱动 → 连接数据库 → 创建/操作表 → 关闭连接。
  • 安全实践:参数化查询、事务控制、字符集配置。
  • 扩展建议:
    • 结合 WITH 语句自动管理连接(如 with db.cursor() as cursor)。
    • 使用 ORM 框架(如 SQLAlchemy)简化复杂操作。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。