Python connecte et exploite la base de données MySQL, principalement via le module Pymysql. Nous expliquons ici comment stocker les données capturées dans une base de données MySQL.
Tout d'abord, vous devez vous assurer que la base de données MySQL a été installée sur votre ordinateur, puis procéder comme suit :
# 1. 连接到mysql数据库 mysql -h227.0.0.1 -uroot -p123456 # 2. 建库 create database maoyandb charset utf8; # 3. 切换数据库 use maoyandb; # 4. 创建数据表 create table filmtab( name varchar(100), star varchar(400), time varchar(30) );
1) Connectez-vous à la base de données
db = pymysql.connect('localhost','root','123456','maoyandb')
Description du paramètre :
localhost : L'adresse du serveur MySQL local ou l'adresse IP de la base de données distante.
root : le nom d'utilisateur utilisé pour se connecter aux données.
mot de passe : Le mot de passe utilisé pour se connecter à la base de données, le mot de passe du serveur MySQL local est "123456".
db : Le nom de la base de données connectée.
2) Créer un objet curseur
cursor = db.cursor()
3) Exécuter la commande SQL
La méthode execute() est utilisée pour exécuter des instructions SQL. Comme indiqué ci-dessous :
#第一种方法:编写sql语句,使用占位符传入相应数据 sql = "insert into filmtab values('%s','%s','%s')" % ('刺杀,小说家','雷佳音','2021') cursor.excute(sql) 第二种方法:编写sql语句,使用列表传参方式 sql = 'insert into filmtab values(%s,%s,%s)' cursor.execute(sql,['刺杀,小说家','雷佳音','2021'])
4) Soumettre les données
db.commit()
5) Fermer la base de données
cursor.close() db.close()
Le code complet est le suivant :
# -*-coding:utf-8-*- import pymysql #创建对象 db = pymysql.connect('localhost','root','123456','maoyandb') cursor = db.cursor() # sql语句执性,单行插入 info_list = ['刺杀,小说家','雷佳音,杨幂','2021-2-12'] sql = 'insert into movieinfo values(%s,%s,%s)' #列表传参 cursor.execute(sql,info_list) db.commit() # 关闭 cursor.close() db.close()
Interrogez les résultats des données comme suit :
Interrogez les résultats de l'insertion comme suit :mysql> +-------------+---------+---------------+
| nom | étoile --+
| +-------------+---------------- -- -----+-----------+
1 lignes dans l'ensemble (0,01 sec)
Il existe également une méthode plus efficace, utilisantexecutemany() pour insérer plusieurs éléments de données en même temps. Un exemple est le suivant :db = pymysql.connect('localhost','root','123456','maoyandb',charset='utf8') cursor = db.cursor() # sql语句执性,列表元组 info_list = [('我不是药神','徐峥','2018-07-05'),('你好,李焕英','贾玲','2021-02-12')] sql = 'insert into movieinfo values(%s,%s,%s)' cursor.executemany(sql,info_list) db.commit() # 关闭 cursor.close() db.close()Copier après la connexion
mysql> select * from movieinfo;
+-------------+-------- -- ---------+----------------+| nom ----------------+- --------------------+| Je ne suis pas le dieu de la médecine | Xu Zheng | 2018-07-05 |
Modifiez maintenant le programme d'exploration pour stocker les données capturées dans la base de données MySQL. Comme indiqué ci-dessous :
| Bonjour, Li Huanying | 2021-02-12 |
+-------------+------------------------+--- ----- ----+
2 lignes dans l'ensemble (0,01 sec)
Modifiez le programme d'exploration
# coding=gbk from urllib import request import re import time import random from ua_info import ua_list import pymysql class MaoyanSpider(object): def __init__(self): #初始化属性对象 self.url = 'https://maoyan.com/board/4?offset={}' #数据库连接对象 self.db = pymysql.connect( 'localhost','root','123456','maoyandb',charset='utf8') #创建游标对象 self.cursor = self.db.cursor() def get_html(self,url): headers = {'User-Agent':random.choice(ua_list)} req = request.Request(url=url,headers=headers) res = request.urlopen(req) html = res.read().decode() # 直接解析 self.parse_html(html) def parse_html(self,html): re_bds = '<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>' pattern = re.compile(re_bds,re.S) r_list = pattern.findall(html) self.save_html(r_list) def save_html(self, r_list): L = [] sql = 'insert into movieinfo values(%s,%s,%s)' # 整理数据 for r in r_list: t = ( r[0].strip(), r[1].strip()[3:], r[2].strip()[5:15] ) L.append(t) print(L) # 一次性插入多条数据 L:[(),(),()] try: self.cursor.executemany(sql,L) # 将数据提交数据库 self.db.commit() except: # 发生错误则回滚 self.db.rollback() def run(self): for offset in range(0,11,10): url = self.url.format(offset) self.get_html(url) time.sleep(random.uniform(1,3)) # 断开游标与数据库连接 self.cursor.close() self.db.close() if __name__ == '__main__': start=time.time() spider = MaoyanSpider() spider.run() end=time.time() print("执行时间:%.2f" % (end-start))
mysql> sélectionnez * dans movieinfo;
+----------------+---------------------- ------------------------------------+------------+
| nom ----------------------------------+------------ ---------+
| Je ne suis pas le Dieu de la médecine | Xu Zheng, Zhou Yiwei, Wang Chuanjun | 2018-07-05 |
| La rédemption de Shawshank | Tim Robbins, Morgan Freeman, Bob Gunton 10 |
| Livre vert | Viggo Mortensen, Mahershala Ali, Linda Cardellini | 2019-03-01 |
| Le pianiste en mer | Tim Ross, Bill · ; | 2018-08-03 |
| Concubine | Leslie Cheung , Zhang Fengyi, Gong Li , Justino Durano, Sergio Bini Busterik 2 | 020-01-03 |
| Ce tueur n'a pas trop froid | Jean Reno, Gary Ode Mann, Natalie Portman | 2010- 09-01 |
+----------------+-------------------------------- --------------------+--------------- ------+
10 lignes dans l'ensemble (0,01 sec)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!