前言
实现python连接数据库并完成存储、查找、删除数据等操作。
一、用python存储数据到数据库
代码如下:
# 先预设变量
company = '阿里巴巴'
title = '测试标题'
href = '测试链接'
source = '测试来源'
date = '测试日期'
# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
port= 3306,
user='root',
password='A9801051626com',
database='mytestdb',
charset='utf8')
# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()
# 执行sql语句
sql = "insert into mytestdb.pachong values (%s,%s,%s,%s,%s)"
cur.execute(sql,(company,title,href,date,source)) # 执行语句、
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
# 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()
二、用python在数据库中查找并提取数据
代码如下:
# 先预设变量
company = '阿里巴巴'
# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
port= 3306,
user='root',
password='A9801051626com',
database='mytestdb',
charset='utf8')
# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()
# 执行sql语句
sql = "select * from mytestdb.pachong where company = %s"
cur.execute(sql,company) # 执行语句、
data = cur.fetchall() #提取所有数据,并赋值给变量data
print(data)
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
# 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()
# 处理元祖--提取到每条新闻的标题
for i in range(len(data)):
print(data[i][1])
结果如下:
((‘阿里巴巴’, ‘标题1’, ‘链接1’, ‘日期1’, ‘来源1’), (‘阿里巴巴’, ‘测试标题’, ‘测试链接’, ‘测试日期’, ‘测试来源’))
标题1
测试标题
三、用python从数据库中删除数据
代码如下(示例):
# 先预设变量
company = '阿里巴巴'
# 连接数据库
import pymysql
db = pymysql.connect(host='localhost',
port= 3306,
user='root',
password='A9801051626com',
database='mytestdb',
charset='utf8')
# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()
# 执行sql语句
sql = "delete from mytestdb.pachong where company = %s"
cur.execute(sql,company) # 执行语句、
data = cur.fetchall() #提取所有数据,并赋值给变量data
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
# 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()
四、案例实战:将金融数据存入数据库
将数据挖掘爬取到的数据存入数据库
#批量获取多家公司多页的新浪财经新闻并清洗数据---这里公司名称不能直接用中文
from urllib import request,parse
import requests
import random
import time
import re
# 连接数据库
import pymysql
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'}
def Sina(company):
url = 'https://search.sina.com.cn/?q={}&c=news&from=channel'
url = url.format(parse.quote(company))
res = requests.get(url, headers=headers, timeout=10).text
# print(res)
# 编写正则表达式提取数据
p_title = '<h2><a href=.*?target=".*?">(.*?)</a>'
title = re.compile(p_title, re.S).findall(res)
p_href = '<h2><a href="(.*?)">'
href = re.compile(p_href, re.S).findall(res)
p_date = '<h2><a href=.*?<span class="fgray_time">.*?\s(.*?)</span></h2>'
date = re.compile(p_date, re.S).findall(res)
p_source = '<h2><a href=.*?<span class="fgray_time">(.*?)\s.*?</span></h2>'
source = re.compile(p_source, re.S).findall(res)
#print(title,href,date)
# 数据清洗及打印输出
for i in range(len(title)):
title[i] = re.sub('<.*?>', '', title[i])
title[i] = re.sub('&.*?;', '', title[i])
date[i] = re.sub('<.*?>', '', date[i])
source[i] = re.sub('<.*?>', '', source[i])
db = pymysql.connect(host='localhost',
port=3306,
user='root',
password='A9801051626com',
database='mytestdb',
charset='utf8')
# 获取游标(用来操作数据库,执行sql语句)
cur = db.cursor()
# 执行sql语句
sql = "insert into mytestdb.pachong values (%s,%s,%s,%s,%s)"
cur.execute(sql, (company, title[i], href[i], date[i], source[i])) # 执行语句、
db.commit() # 将写操作提交(只有写需要)可以多次操作一起递交,也可执行一点操作一点
# 没有commit数据库是不会改变的
# 关闭数据库
cur.close()
db.close()
companys = ['华能信托','阿里巴巴','百度集团','万科集团','腾讯','京东']
for i in companys:
try:
Sina(i)
# 每爬取1个页面随机休眠1-3秒
time.sleep(random.randint(1, 3))
print(i + '爬取并存入数据库成功')
except:
print(i + '爬取并存入数据库失败')