【愚公系列】《Python网络爬虫从入门到精通》039-MySQL数据库
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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
步骤说明:
-
背景需求:
-
MySQL 以独立进程运行,需通过 Python 驱动连接。 -
PyMySQL 是符合 Python DB-API 规范的轻量级 MySQL 驱动。
-
-
安装方法:
在命令行中执行以下命令: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 语句与代码实现:
-
删除旧表(若存在):
DROP TABLE IF EXISTS books;
-
创建新表语句:
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;
-
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()

注意事项:
-
防 SQL 注入:使用 %s
占位符而非字符串拼接。 -
字符集设置:连接时指定 charset="utf8"
确保中文正确存储。 -
事务管理: -
成功时 commit()
提交更改。 -
失败时 rollback()
回滚至操作前状态。
-
-
资源释放:始终在 finally
中关闭连接。
🔎5.总结
-
PyMySQL 核心流程:安装驱动 → 连接数据库 → 创建/操作表 → 关闭连接。 -
安全实践:参数化查询、事务控制、字符集配置。 -
扩展建议: -
结合 WITH
语句自动管理连接(如with db.cursor() as cursor
)。 -
使用 ORM 框架(如 SQLAlchemy)简化复杂操作。
-
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)