爬虫与Python:(四)爬虫进阶二之数据存储(数据库存储)——5.MySQL存储
当数据量大,并且需要使用数据进行后期操作时,需要用到数据库。下面讲解在Python中使用MySQL 存储。
MySQL 数据库安装
详见官方文档或:https://www.cnblogs.com/luyj00436/p/15476678.html。
MySQL 数据驱动安装
mysql-connector是MySQL 官方提供的驱动器,使用它可以连接MySQL .用户可以使用pip命令来安装mysql-connector。
python -m pip install mysql-connector
运行以下代码测试mysql-connector是否安装成功,如果没有产生错误,则表示安装成功。
import mysql.connector
1. 创建数据库连接
要操作数据库,首先要获取数据库连接。使用mysql-connector获取到MySQL数据库连接示例代码如下:
1 import mysql.connector 2 3 # 连接数据库 4 mydb = mysql.connector.connect( 5 host="localhost", # 数据库主机地址 6 user="root", # 数据库用户名 7 passwd="123456", # 数据库密码 8 database="test_db", # 连接数据库名称 9 ) 10 print(mydb)
2. 插入数据
接下来,我们需要插入数据。假设数据库中已存在一张名为"test_01"的表,并且包含id、name和age这3个字段,在其中插入一条测试数据。
1 import mysql.connector 2 3 # 插入测试数据 4 mydb = mysql.connector.connect( 5 host="localhost", # 数据库主机地址 6 user="root", # 数据库用户名 7 passwd="123456", # 数据库密码 8 database="test_db", # 连接数据库名称 9 ) 10 mycursor = mydb.cursor() 11 12 sql = "INSERT INTO test_01(id,name,age) VALUES(%s,%s,%s)" 13 val = (1,"张三",23) 14 mycursor.execute(sql ,val) 15 mydb.commit() # 提交事务。数据表内容已经有更新,必须用到该语句。 16 print(mycursor.rowcount,"记录插入成功")
通过数据库客户端连接连接工具观察,发现已经插入了数据。
3. 批量插入
在实际开发中,往往爬虫每次获取到的数据都是几十条或上百条,所以这时如果向数据库中插入数据或涉及批量插入的问题——即只连接数据库一次,然后循环执行,知道完成所有插入语句再调用commit方法提交。这样做可以节省数据库开销和提升插入熟读,其示例代码如下。
1 import mysql.connector 2 3 mydb = mysql.connector.connect( 4 host="localhost", 5 user="root", 6 passwd="123456", 7 database="test_db", 8 ) 9 mycursor = mydb.cursor() 10 11 sql = "INSERT INTO test_01(id,name,age) VALUES(%s,%s,%s)" 12 val = [ 13 (2,"张三",12), 14 (3,"李四",12), 15 (4,"王五",12), 16 (5,"赵六",12), 17 ] 18 mycursor.executemany(sql ,val) 19 mydb.commit() # 提交事务。数据表内容已经有更新,必须用到该语句。 20 print(mycursor.rowcount,"记录插入成功")
运行以上代码后,就会发现数据库中已经成功地插入了4条记录。
4. 查询数据
使用最频繁的还是查询。在以下查询示例中,执行fetchall()方法来获取所有返回结果。
1 import mysql.connector 2 3 # 查询数据 4 mydb = mysql.connector.connect( 5 host="localhost", 6 user="root", 7 passwd="123456", 8 database="test_db", 9 ) 10 mycursor = mydb.cursor() 11 12 sql = "SELECT * FROM test_01" 13 mycursor.execute(sql ) 14 myresult = mycursor.fetchall() # fetchall()获取所有记录 15 16 for x in myresult: 17 print(x)
运行后控制台输出返回结果:
5. 更新数据库
调用更新数据与插入数据的方法是一样的,只是sql语句不同而已。例如,下面的示例更新“test_01”表id为1的数据。
1 import mysql.connector 2 3 # 更新数据 4 mydb = mysql.connector.connect( 5 host="localhost", 6 user="root", 7 passwd="123456", 8 database="test_db", 9 ) 10 mycursor = mydb.cursor() 11 12 sql = "UPDATE test_01 SET name='测试' WHERE id = 1" 13 mycursor.execute(sql) 14 mydb.commit() 15 16 print(mycursor.rowcount ,"条记录被修改")
运行以上代码后,发现数据库中数据已经成功修改。
除了使用mysql-connector库连接操作MySQL数据库外,还可以使用PyMySQL库。该库使用方法mysql-connect类似,同样也可以通过pip命令安装。命令为 pip3 install PyMySQL 。