在当今数据驱动的时代,爬虫技术能从互联网获取海量信息,而将这些信息有效存储和管理则离不开数据库。MySQL作为一款广泛使用的关系型数据库,与Python的PyMySQL库结合,能为爬虫数据存储提供高效解决方案。
PyMySQL入门:连接Python与MySQL的桥梁
关系型数据库以二维表形式存储数据,MySQL便是其中的佼佼者。在Python 3环境中,PyMySQL库是连接Python与MySQL的重要接口,它实现了Python数据库API v2.0,旨在替代Python 2中的MySQLdb库。
安装PyMySQL十分简便,只需在CMD命令行中输入pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple,借助清华镜像源可加快安装速度。安装完成后,便可通过四个关键步骤使用PyMySQL操作MySQL数据库。
首先是创建数据库连接对象,这需要通过pymysql.connect()函数设置一系列参数,包括主机名或IP(Host)、端口(Port,默认3306)、用户名(User)、密码(Password)、数据库名(Db)、字符集(Charset,避免中文乱码)等。例如连接本地数据库的代码:connect = pymysql.connect(host="127.0.0.1", user="root", db="spider", password="123456", charset="utf8")。
获取游标对象是第二步,游标就像操作数据库的“指针”,通过cursor = connect.cursor()即可获取,所有SQL语句的执行都基于游标。
第三步是执行SQL语句,使用cursor.execute(SQL语句)能执行各类DDL、DML语句,如插入、更新、删除、查询等操作。
最后,完成操作后需提交事务并关闭连接。PyMySQL默认开启事务,connect.commit()用于提交事务,若操作失败,可通过connect.rollback()回滚事务。操作结束后,用cursor.close()和connect.close()关闭游标和连接,释放资源。
数据库表操作:从创建到增删改查
创建表是数据存储的基础。以创建学生表students为例,需定义字段名、类型等信息,通过执行CREATE TABLE语句实现,如sql = 'create table if not exists students(id varchar(255) not null, name varchar(255), age int not null, primary key(id))',再用cursor.execute(sql)执行。
插入数据时,要考虑事务的ACID特性——原子性(操作要么全做要么全不做)、一致性(使数据库从一个一致状态到另一个一致状态)、隔离性(事务间互不干扰)、持久性(提交后改变永久有效)。为保证数据一致性,插入操作通常放在try-except块中,成功则提交,失败则回滚。除了直接构造SQL语句,还可使用动态字典插入数据,当表新增字段时,无需修改插入语句,只需更新字典,极大提高了灵活性。
更新数据通过UPDATE语句实现,如将名为“Bob”的学生年龄改为23岁,执行sql = 'update students set age=%s where name=%s'和cursor.execute(sql, (23, 'Bob'))即可。
删除数据使用DELETE语句,可根据条件删除满足要求的记录,例如sql = 'delete from students where age >22'。
查询数据则依靠SELECT语句,配合游标提供的fetchone()(获取下一行)、fetchmany(size)(获取下几行)、fetchall()(获取所有行)等方法获取结果,rowcount还能返回数据条数或影响行数。
实战案例:爬虫数据存储的完整流程
豆瓣图书新书速递信息爬取案例展示了完整的数据处理流程。首先爬取目标页面,然后在MySQL中创建bookinfo表,定义字段包括自增长ID、书名、评分、作者、出版社、出版日期等。接着利用XPath规则解析页面,提取所需字段,最后通过PyMySQL将解析后的数据存储到数据库。
在存储时,可选择逐条存储或批量存储,cursor.executemany(SQL, val)方法支持一次插入多条数据,能提高存储效率。
安居客二手房信息爬取案例进一步拓展了应用场景。从爬取页面、解析卖点、楼盘、地址等信息,到创建houseinfo表存储数据,再到通过通用函数save_mysql实现数据批量存储,整个过程体现了爬虫与数据库交互的实用性和高效性。
通过PyMySQL,Python与MySQL实现了无缝对接,为爬虫数据的存储和管理提供了强有力的支持,无论是简单的数据存储还是复杂的批量操作,都能游刃有余,助力我们更好地挖掘和利用数据价值。

364

被折叠的 条评论
为什么被折叠?



