使用python连接MySQL数据库

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

使用python连接MySQL数据库

作者:  蓝鲸

本篇文章使用python中的pymysql库连接MySQL数据库,并完成建表,数据写入和查询的过程。为了保证内容的完整性,我们将内容分为两个 阶段,第一阶段简单介绍数据的爬取过程。看过之前爬虫文章的同学请直接忽略。第二阶段介绍将爬去的数据写入MySQL数据库的过程。

使用python连接MySQL数据库
1,使用python抓取并提取数据

第一阶段介绍数据爬取过程,首先导入所需的库文件,主要包括requests,re和pandas三个库。具体作用在注释中进行了说明,这里不再赘述。

						#导入requests库(请求和页面抓取)
						import
						requests
						#导入正则库(从页面代码中提取信息)
						import
						re
						#导入科学计算库(拼表及各种分析汇总)
						import
						pandas
						as
						pd
					

设置爬取请求中的头文件信息。

						#设置请求中头文件的信息
						headers =
						{
						'User-Agent'
						:
						
							'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64
							Safari/537.11'
						
						,
						'Accept'
						:
						'text/html;q=0.9,*/*;q=0.8'
						,
						'Accept-Charset'
						:
						'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
						,
						'Connection'
						:
						'close'
						,
						'Referer'
						:
						'https://www.baidu.com/'
						}
					

开始抓取数据,并查看抓取到的网页内容。这里我们所需要的数据还在页面源码中,需要使用正则表达式进行提取。

						#抓取并保存页面信息
						r=requests.
						get
						(
						'http://www.p2peye.com/shuju/ptsj/'
						,headers=headers
						)
						html=r.
						content
						#对抓取的页面进行编码
						html=
						str
						(
						html, encoding =
						"GBK"
						)
						#查看抓取的页面源码
						html
					

使用python连接MySQL数据库

使正则表达式从抓取到的网页源码中提取所需数据。这里我们一共提取9个字段。

						#使用正则提取title字段信息
						title=
						re
						.
						findall
						(
						r
						'"return false".*?title="(.*?)"'
						,html
						)
						#使用正则提取total字段信息
						total=
						re
						.
						findall
						(
						r
						'"total">(.*?)万<'
						,html
						)
						#使用正则提取rate字段信息
						rate=
						re
						.
						findall
						(
						r
						'"rate">(.*?)<'
						,html
						)
						#使用正则提取pnum字段信息
						pnum=
						re
						.
						findall
						(
						r
						'"pnum">(.*?)人<'
						,html
						)
						#使用正则提取cycle字段信息
						cycle=
						re
						.
						findall
						(
						r
						'"cycle">(.*?)月<'
						,html
						)
						#使用正则提取plnum字段信息
						p1num=
						re
						.
						findall
						(
						r
						'"p1num">(.*?)人<'
						,html
						)
						#使用正则提取fuload字段信息
						fuload=
						re
						.
						findall
						(
						r
						'"fuload">(.*?)分钟<'
						,html
						)
						#使用正则提取alltotal字段信息
						alltotal=
						re
						.
						findall
						(
						r
						'"alltotal">(.*?)万<'
						,html
						)
						#使用正则提取captial字段信息
						capital=
						re
						.
						findall
						(
						r
						'"capital">(.*?)万<'
						,html
						)
					

查看其中一个字段的信息,这里我们查看平台名称title的提取结果。

						#查看title字段信息
						title
					

使用python连接MySQL数据库

到这里第一阶段的数据爬取工作完成了,现在我们有9个字段的数据,在下一阶段中我们将连接MySQL数据库,并将这9个字段的数据写到数据库里。

2,连接MySQL数据库写入并读取数据

在第二阶段,我们使用python的pymysql库连接MySQL数据库。如果你是第一次使用这个库需要先通过pip install pymysql进行安装,然后导入pymysql库文件。

						#导入pymysql库
						import
						pymysql
					

首先连接MySQL数据库,这里需要输入数据库的ip地址,用户名,密码,数据库名称,端口号等信息。我在这里只简单些了ip地址,用户名和数据库名称。每个参数的内容请按你数据库的实际信息进行填写。

						#打开数据库连接
						db = pymysql.
						connect
						(
						"192.168.0.1"
						,
						"root"
						,
						""
						,
						"shuju_test"
						)
					

使用 cursor()创建一个游标对象

						# 使用 cursor() 方法创建一个游标对象 cursor
						cursor = db.
						cursor
						(
						)
					

在数据库中创建一个包含9个字段的数据表,用于写入数据。这里具体分为两步,第一步写出创建数据表的SQL语句。第二步使用execute()执行SQL语句

						#创建一个表
						sql1 =
						
							"CREATE TABLE wdty7( title varchar(255), total varchar(255), rate varchar(255), people_num varchar(255), cycle
							varchar(255), people_lend_num varchar(255), full_load varchar(255), all_total varchar(255), capital varchar(255)) "
						
						 
						# 使用 execute() 方法执行 SQL 语句
						cursor.
						execute
						(
						sql1
						)
					


创建完数据表后,开始写入数据,这里我们使用for循环向数据表中逐条写入9个字段的数据。

						#向表中创建新的记录
						for
						i
						in
						range
						(
						len
						(
						title
						)
						)
						:
						sql=
						
							"INSERT INTO `wdty6`(`title`, `total`, `rate`, `people_num`, `cycle`, `people_lend_num`, `full_load`, `all_total`,
							`capital`)VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s);"
						
						values=
						(
						title
						[
						i
						]
						.
						encode
						(
						"utf-7"
						)
						.
						decode
						(
						"latin1"
						)
						,total
						[
						i
						]
						,rate
						[
						i
						]
						,pnum
						[
						i
						]
						,cycle
						[
						i
						]
						,p1num
						[
						i
						]
						,fuload
						[
						i
						]
						,alltotal
						[
						i
						]
						,capital
						[
						i
						]
						)
						cursor.
						execute
						(
						sql,values
						)
						db.
						commit
						(
						)
					

创建一个查询语句并使用execute()方法执行查询。

						#设置查询语句
						sql1=
						"SELECT * FROM wdty6 where cycle>0.6;"
						 
						# 使用 execute() 方法执行 SQL 查询
						cursor.
						execute
						(
						sql1
						)
					


使用fetchall()获取刚才写入的所有9个字段的数据,并保存在data中。

						#使用fetchall()方法获取所有数据
						data = cursor.
						fetchall
						(
						)
					

将data中的数据转为pandas的DataFrame格式。

						#将获取数据
						import
						pandas
						as
						pd
						columns=
						[
						"title"
						,
						"total"
						,
						"rate"
						,
						"people_num"
						,
						"cycle"
						,
						"people_lend_num"
						,
						"full_load"
						,
						"all_total"
						,
						"capital"
						]
						df = pd.
						DataFrame
						(
						list
						(
						data
						)
						,columns=columns
						)
					

查看从数据库中提取的数据,这里有个问题,平台名称title字段中的中文在写入数据库后变成了乱码,应该是编码转换的问题。目前还没有找到解决办法。如有知道解决办法的朋友请赐教。

						#查看数据表
						df.
						head
						(
						)
					

使用python连接MySQL数据库

最后,完成所有操作后关闭数据库的连接。

						# 关闭数据库连接
						db.
						close
						(
						)
					

End.

转载请注明来自36大数据(36dsj.com): 36大数据 » 使用python连接MySQL数据库

随意打赏

使用mysqlpython
提交建议
微信扫一扫,分享给好友吧。