Python Pymysql实现数据存储

Python连接并操作MySQL数据库,主要通过Pymysql模块实现。本节讲解如何将抓取的数据存储至MySQL数据库。

创建存储数据表

首先您应该确定您的计算机上已经安装了MySQL数据库,然后再进行如下操作:

# 1. 连接到mysql数据库mysql -h127.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)
);123456789101112复制代码类型:[python]

Pymysql基本使用

1)连接数据库

db = pymysql.connect('localhost','root','123456','maoyandb')1复制代码类型:[java]

参数说明:

localhost:本地MySQL服务端地址,也可以是远程数据库的IP地址。

root:连接数据所使用的用户名。

password:连接数据库使用的密码,本机MySQL服务端密码“123456”。

db:连接的数据库名称。

2)创建cursor对象

cursor = db.cursor()1复制代码类型:[java]

3)执行sql命令

execute()方法用来执行SQL语句。如下所示:

#第一种方法:编写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'])123456复制代码类型:[python]

4)提交数据

db.commit()12复制代码类型:[python]

5)关闭数据库

cursor.close()
db.close()12复制代码类型:[python]

完整的代码如下所示:

# -*-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()1234567891011121314复制代码类型:[python]

查询数据结果,如下所示:

mysql> select * from movieinfo;
+-------------+-------------------+-----------+
| name  | star  | time   |
+-------------+-------------------+-----------+
| 刺杀,小说家   | 雷佳音,杨幂   | 2021-2-12 |
+-------------+-------------------+-----------+1 rows in set (0.01 sec)1234567复制代码类型:[python]

还有一种效率较高的方法,使用executemany()可以同时插入多条数据。示例如下:

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()12345678910复制代码类型:[python]

查询插入结果,如下所示:

mysql> select * from movieinfo;
+-------------+-------------------+------------+
| name  | star  | time |
+-------------+-------------------+------------+
| 我不是药神  | 徐峥  | 2018-07-05 |
| 你好,李焕英 | 贾玲  | 2021-02-12 |
+-------------+-------------------+------------+2 rows in set (0.01 sec)12345678复制代码类型:[python]

修改爬虫程序

将抓取下来的数据存储到MySQL数据库。如下所示:

# coding=gbkfrom urllib import requestimport reimport timeimport randomfrom ua_info import ua_listimport pymysqlclass 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()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162复制代码类型:[python]

数据库查询存储结果,如下所示:

mysql> select * from movieinfo;
+----------------+----------------------------------------------------------+------------+
| name  | star     | time |
+----------------+----------------------------------------------------------+------------+
| 我不是药神  | 徐峥,周一围,王传君     | 2018-07-05 |
| 肖申克的救赎   | 蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿    | 1994-09-10 |
| 绿皮书   | 维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼    | 2019-03-01 |
| 海上钢琴师  | 蒂姆·罗斯,比尔·努恩,克兰伦斯·威廉姆斯三世   | 2019-11-15 |
| 小偷家族 | 中川雅也,安藤樱,松冈茉优   | 2018-08-03 |
| 霸王别姬 | 张国荣,张丰毅,巩俐     | 1993-07-26 |
| 哪吒之魔童降世 | 吕艳婷,囧森瑟夫,瀚墨    | 2019-07-26 |
| 美丽人生 | 罗伯托·贝尼尼,朱斯蒂诺·杜拉诺,赛尔乔·比尼·布斯特里克   | 2020-01-03 |
| 这个杀手不太冷 | 让·雷诺,加里·奥德曼,娜塔莉·波特曼     | 1994-09-14 |
| 盗梦空间 | 莱昂纳多·迪卡普里奥,渡边谦,约瑟夫·高登-莱维特   | 2010-09-01 |
+----------------+----------------------------------------------------------+------------+10 rows in set (0.01 sec)
(0)

相关推荐

  • python笔记33-python3连mysql增删改查

    前言 做自动化测试的时候,注册了一个新用户,产生了多余的数据,下次用同一账号就无法注册了,这种情况该怎么办呢? 自动化测试都有个数据准备和数据清理的操作,如果因为此用例产生了多余的数据,就需要数据清理 ...

  • 几种Python 数据读写方式,面向Txt、csv文档及MongoDB、MySQL等数据库

    几种Python 数据读写方式,面向Txt、csv文档及MongoDB、MySQL等数据库

  • 如何在Python中操作MySQL?

    一. python操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库, ...

  • Python3操作MySQL数据库

    在Python3中操作MySQL数据库 在Python3中使用mysql数据库需要安装pymysql库 pip install pymysql 操作MySQL 导包 import pymysql 第一 ...

  • Cypress web自动化35-cy.exec()执行python命令操作数据库

    前言 cy.exec()可以执行系统命令,获取到stdout内容,当我们要操作数据库,准备测试数据的时候,通常用python连数据库操作会非常方便. 我们可以先把操作数据库的方法封装到一个py文件,这 ...

  • Python常用的数据存储方式有哪些?五种!

    当我们学习Python的时候,肯定避免不了与数据打交道,而提及数据,大部分人都会想起Python数据存储,那么你知道Python常用的数据存储方式有哪些?我们一起来看看这五种存储方式吧. 1. jso ...

  • 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...

  • 「爬虫四步走」手把手教你使用Python抓取并存储网页数据

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...

  • EB级大数据存储时代,智能化提升数据价值

    具体趋势包括了超融合.信创存储.数据保护.全闪存.EB级大数据存储.IPFS.NVMe SSD.SDS和混合云存储共计九个方面,目前业界和用户最为关注的技术方向. "数据存储新趋势" ...

  • 开疆辟土,IPFS成为数据存储新蓝海

    业界大咖对话:预见2021年数据存储最新9大趋势 新趋势关键词:IPFS 新趋势:开疆辟土,IPFS成为数据存储新蓝海 在IDC Data Age 2025报告中阐述,2019-2025年将是数据爆发 ...

  • 全闪存加速,激发数据存储整体市场的创新与发展

    业界大咖对话:预见2021年数据存储最新9大趋势 新趋势关键词:全闪存 新趋势:全闪存加速,激发数据存储整体市场的创新与发展 当初全闪存出现之时,就有业界朋友预见说全闪存必将改变整个数据存储市场格局. ...

  • 大数据安全分析07_大数据存储技术介绍

    鉴于网络安全数据组成的复杂性.规模,以及对实时搜索响应的需求,需要通过大数据存储集群快速实现空间的扩容,在PB级的安全数据中做到安全分析查询的秒级响应,同时需要为数据提供了冗余机制,保障数据的安全. ...

  • 数据存储的趣事

    引:本来想系统学习整理一下文件系统的体系,一不小心发现了一个关于存储的趣文,Jessie Frazelle 的 "The Life of a Data Byte"(https:// ...

  • Python遍历pandas数据方法总结

    嗨学编程 2019-03-16 17:32:43 分类专栏: 数据分析 文章标签: pandas python 版权 前言 Pandas是python的一个数据分析包,提供了大量的快速便捷处理数据的函 ...