数据存储之使用mysql数据库存储数据
推荐安装mysql5.7环境:
- 官网下载:https://dev.mysql.com/downloads/installer/5.7.html
- 如果提示没有
.NET Framework
框架。那么就在提示框中找到下载链接,下载一个就可以了。 - 如果提示没有
Microsoft Virtual C++ x64(x86)
,那么百度或者谷歌这个软件安装即可。
Navicat Premium 版本:
navicat是一个操作mysql数据库非常方便的软件。使用他操作数据库,就跟使用excel操作数据是一样的。
1.官网下载:http://www.navicat.com.cn/download/navicat-premium
推荐使用 (官网最新版的没有破解成功,推荐这个版本)Navicat Premium 12.0.27简体中文64位,密码: s9f8
2.破解参考
https://blog.csdn.net/pippa134679/article/details/81354131
https://www.jianshu.com/p/5f693b4c9468
安装驱动程序:
Python要想操作MySQL。必须要有一个中间件,或者叫做驱动程序。驱动程序有很多。比如有mysqldb
、mysqlclient
、pymysql
等。在这里,我们选择用pymysql
。安装方式也是非常简单,通过命令pip install pymysql
即可安装。
数据库连接:
数据库连接之前。首先先确认以下工作完成,这里我们以一个pymysql_test
数据库.以下将介绍连接mysql
的示例代码:
import pymysql db = pymysql.connect(
host="127.0.0.1",
user='root',
password='root',
database='pymysql_test',
port=3306
)
cursor = db.cursor()
cursor.execute("select 1")
data = cursor.fetchone()
print(data)
db.close()
插入数据:
import pymysql db = pymysql.connect(
host="127.0.0.1",
user='root',
password='root',
database='pymysql_test',
port=3306
)
cursor = db.cursor()
sql = """
insert into user(
id,username,gender,age,password
)
values(null,'abc',1,18,'111111');
"""
cursor.execute(sql)
db.commit()
db.close()
如果在数据还不能保证的情况下,可以使用以下方式来插入数据:
sql = """
insert into user(
id,username,gender,age,password
)
values(null,%s,%s,%s,%s);
""" cursor.execute(sql,('spider',1,20,'222222'))
查找数据:
使用pymysql
查询数据。可以使用fetch*
方法。
fetchone()
:这个方法每次之获取一条数据。fetchall()
:这个方法接收全部的返回结果。fetchmany(size)
:可以获取指定条数的数据。
示例代码如下:
cursor = db.cursor() sql = """
select * from user
""" cursor.execute(sql)
while True:
result = cursor.fetchone()
if not result:
break
print(result)
db.close()
或者是直接使用fetchall
,一次性可以把所有满足条件的数据都取出来:
cursor = db.cursor() sql = """
select * from user
""" cursor.execute(sql)
results = cursor.fetchall()
for result in results:
print(result)
db.close()
或者是使用fetchmany
,指定获取多少条数据:
cursor = db.cursor() sql = """
select * from user
""" cursor.execute(sql)
results = cursor.fetchmany(1)
for result in results:
print(result)
db.close()
删除数据:
cursor = db.cursor() sql = """
delete from user where id=1
""" cursor.execute(sql)
db.commit()
db.close()
更新数据:
conn = pymysql.connect(host='localhost',user='root',password='root',database='pymysql_demo',port=3306)
cursor = conn.cursor() sql = """
update user set username='aaa' where id=1
"""
cursor.execute(sql)
conn.commit() conn.close()
实战抓取安居客广西南宁全区的租房信息(正则表达式,MySQL数据库保存)
import requests
import re
import pymysql # 实战抓取安居客广西南宁全区的租房信息(正则表达式,数据库保存)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
} def insert_house_detail(url):
print(url)
# 连接数据库和添加数据
conn = pymysql.connect(host='localhost', user='root', password='password', database='zufang', port=3306)
cursor = conn.cursor() # 添加数据
sql = """
insert into house(id,title,img,price,payType,leaseType,houseType,address,detail) values(null,%s,%s,%s,%s,%s,%s,%s,%s)
""" # 获取数据并添加到数据库
response = requests.get(url, headers=headers)
text = response.text
title = re.findall(r'<h3\sclass="house-title">(.*?)</h3>', text, re.DOTALL)[0]
img = re.findall(r'<div\sclass="img_wrap">.*?<img\sdata-src="(.*?)".*?>', text, re.DOTALL)[0]
price = re.findall(r'<span\sclass="price">.*?<em>(.*?)</em>', text, re.DOTALL)[0]
payType = re.findall(r'<span\sclass="type">(.*?)</span>', text, re.DOTALL)[0]
leaseType = re.findall(r'<span\sclass="info">(.*?)</span>', text, re.DOTALL)[1]
houseType = re.findall(r'<span\sclass="info">(.*?)</span>', text, re.DOTALL)[0]
# houseType = re.findall(r'<ul.*?class="f14">.*?<span\sclass="c_888 mr_15">.*?<span>(.*?)</span>.*?</li>', text, re.DOTALL)[0].replace(' ', '').replace(' ', '').strip() address = re.findall(r'<li\sclass="house-info-item l-width">.*?<a.*?>(.*?)</a>', text, re.DOTALL)
detail_tag = re.findall(r'<div\sclass="auto-general">(.*?)</div>', text, re.DOTALL)[0]
# 去掉抓取到标签和空格
detail = re.sub('<.+?>', "", detail_tag).replace(' ', '').strip() cursor.execute(sql, (title, img, price, payType, leaseType, houseType, address, detail))
conn.commit()
conn.close() def parse_page(url): response = requests.get(url, headers=headers)
text = response.text
# 先获取url
urls = re.findall(r'<div\sclass="zu-info">.*?<a.*?href="(.*?)".*?>.*?</a>', text, re.DOTALL)[1:-2] for index,url_tag in enumerate(urls):
insert_house_detail(url_tag) def main():
for x in range(1,21):
url = 'https://nn.zu.anjuke.com/fangyuan/p%s/' % x
parse_page(url) if __name__ == '__main__':
main()
数据存储之使用mysql数据库存储数据的更多相关文章
- CentOS6 更改Mysql数据库的数据存放位置
mysql使用yum安装时,默认的数据是存储在/var/lib/mysql下.一般情况下,为了数据的安全性,建议将mysql数据库的数据文件存储在系统的第二块磁盘上的目录下可以按照以下步骤进行操作: ...
- MYSQL——数据库存储引擎!
本人安装mysql版本为:mysql Ver 14.14 Distrib 5.7.18, for Win64 (x86_64),查看mysql的版本号方式:cmd-->mysql --vers ...
- Mysql数据库写入数据速度优化
Mysql数据库写入数据速度优化 1)innodb_flush_log_at_trx_commit 默认值为1:设置为0,可以提高写入速度. 值为0:提升写入速度,但是安全方面较差,mysql服务器 ...
- 一步一步跟我学习hadoop(7)----hadoop连接mysql数据库运行数据读写数据库操作
为了方便 MapReduce 直接訪问关系型数据库(Mysql,Oracle).Hadoop提供了DBInputFormat和DBOutputFormat两个类.通过DBInputFormat ...
- MySQL数据库插入数据出现 ERROR 1526 (HY000): Table has no partition for value xxx
MySQL数据库插入数据出现ERROR 1526 (HY000): Table has no partition for value xxx工作的时候发现无法插入数据,报错:ERROR 1526 (H ...
- 修改mysql数据库存储路径
最近一段比较忙,所以一直没有及时的更新总结一下测试路上遇到的问题,今天先来分享一下如何修改mysql存储路径(场景:在自己电脑上搭建的服务器上安装mysql,二.在公司自己的服务器上搭建mysql数据 ...
- 用Python向MySQL数据库插入数据
最近一直在学习MySQL数据库,很感兴趣.这次我做了一个简单的尝试,使用Python3.4与MySQL数据库进行交互,将一份从雪球网上下载的某股票数据上传至MySQL数据库.仅为初学者提供参考,高手请 ...
- mysql数据库delete数据时不支持表别名
今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELETE FROM LEAD_SYSTEM_MENU_ORG_REF as t WHERE t.resourceid='4 ...
- 转】mysql数据库delete数据时不支持表别名
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4012853.html 感谢! 今天在帮同事查看一条删除的SQL语句执行出错的问题 SQL语句如下: 1 DELE ...
随机推荐
- UVALive 7500 Boxes and Balls 2015EC final 签到题 二分
分析题目后,得到要求的是最接近n的一个数,并且这个数字能写成1+2+3+....+x = ans这种形式. 要求的是最大的值. 这题就直接二分去做吧.二分出一个f(mid)<=n的最大值. 最后 ...
- Java面向对象_接口应用——策略模式
概念:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化. 接口抽象的就是某种方法. OO设计原则:1.面向接口编程 2.封装变化 3.多用 ...
- 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
回到目录 对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接 ...
- nginx fpm生产环境的权限设置
http://www.2cto.com/Article/201307/231770.html
- Oracle Hyperion Planning 11.1 .1:创建与管理应用程序 第1课:Planning概述
第1课:Planning概述 1.说明 Oracle Enterprise Performance Management system Oracle Enterprise Performance Ma ...
- CSS中box-sizing属性的作用
今天在项目中看到box-sizing这个属性,以前用过,但是不常用!注意,它是CSS3里的属性喔! W3C 盒子模型:标准盒模型,是指块元素box-sizing属性为content-box的盒模型.一 ...
- 【extjs6学习笔记】0.3 准备: 类库结构2
- Python3基础12(collections、struct、itertools、chardet等的使用)
import struct import base64import itertoolsimport chardet from collections import namedtuple,default ...
- python3基础07(进程操作及执行系统级命令等)
#subprocess 创建子进程 连接输入 输出 管道错误,及获取他们的状态,可执行操作系统级的命令# subprocess.run(args, *, stdin=None, input=None, ...
- sql server 搭建发布订阅后,改端口不正常工作的问题
sql 的发布订阅,想必大家都了解,但一般都是在默认的1433的情况下搭建的,那么1433换成别的端口,发布还能正常工作吗? 在一次客户的真实场景上我就遇到了. 好了,今天不想写太多,简化下, 测试环 ...