使用Python连接MySQL数据库
本篇文章使用python中的pymysql库连接MySQL数据库,并完成建表,数据写入和查询的过程。为了保证内容的完整性,我们将内容分为两个 阶段,***阶段简单介绍数据的爬取过程。看过之前爬虫文章的同学请直接忽略。第二阶段介绍将爬去的数据写入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
使正则表达式从抓取到的网页源码中提取所需数据。这里我们一共提取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
到这里***阶段的数据爬取工作完成了,现在我们有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()
***,完成所有操作后关闭数据库的连接。
- # 关闭数据库连接
- db.close()
相关文章
- 图像处理工具Python扩展库,你了解吗?
- 十个常用的损失函数解释以及Python代码实现
- 30 个数据科学工作中必备的 Python 包
- 如何在 Windows 上安装 Python
- 几行 Python 代码就可以提取数百个时间序列特征
- 使用Python快速搭建接口自动化测试脚本实战总结
- 哪种编程语言最适合开发网页抓取工具?
- 不要在 Python 中使用循环,这些方法其实更棒!
- 震惊!用Python探索《红楼梦》的人物关系!
- 如何最简单、通俗地理解Python模块?
- 酷炫,Python实现交通数据可视化!
- 为什么急于寻找Python的替代者?
- 30 个数据工程必备的Python 包
- 去字节面试被面这题能答上来吗?谈谈你对时间轮的理解?
- 火山引擎在行为分析场景下的 ClickHouse JOIN 优化
- 用Python爬取了某宝1166家月饼数据进行可视化分析,终于找到最好吃的月饼~
- 在 Linux 上试试这个基于 Python 的文件管理器
- Python列表解析式到底该怎么用?
- 如何快速把你的 Python 代码变为 API
- 十个Python初学者常犯的错误