今天来学习下另一个库sqlite3,它可以用来操作数据库,可以将我们爬取后的数据存储起来。这是很重要的一步,即使你会爬取数据,你也要用简洁明了的方式把它存储起来,供我们自然语言处理以及一些其他的数据分析操作
欢迎关注公众号:老白和他的爬虫
在操作数据库的过程中,我们需要一个可视化的软件来展示,之前使用Windows系统时,我使用的是SQLite来显示的,非常方便,但是现在换了苹果电脑,使用SQLite不是很方便,于是我早到了另外一款适合mac的免费的工具——Datum-Lite,这个在AppStore就可以下载到,Windows的用户可以直接点击SQLite去下载。
import sqlite3
import traceback
def create_table(database='weibo.db', table='WEIBO'):
global conn, cursor #使用global声明一个全局变量
if table == 'WEIBO': #创建表WEIBO
table_columns = '''CREATE TABLE IF NOT EXISTS WEIBO(
RID INT PRIMARY KEY NOT NULL,
微博内容 TEXT NOT NULL,
发布时间 TEXT,
用户名 TEXT,
用户等级 TEXT,
用户类别 TEXT,
转发量 TEXT,
点赞数 TEXT,
评论数 TEXT);'''
conn = sqlite3.connect(database)
cursor = conn.cursor()
try:
cursor.execute(table_columns)
print('Table created successfully')
except:
print("Create table failed")
traceback.print_exc()
return False
return True
if __name__ == '__main__':
create_table()
创建后的表用Datum-Lite打开
瞧,你已经使用python创建了一个表!
上一段代码块中的这两句你需要注意一下
conn = sqlite3.connect(database)
cursor = conn.cursor()
前一句是打开了数据库,后一句相当于在已经建立好的链接上建立一个“光标”,方便我们执行sql语句。
由于在数据库的增删查改中,我们需要频繁的使用打开和关闭数据库,于是我们可以干脆把它定义为函数
def open_database(database='weibo.db'):
# 建立连接
# 如果连接不存在,sqlite3会创建一个新的
conn = sqlite3.connect(database)
return conn
def close_database():
global conn, cursor
# commit
conn.commit()
# close cursor
cursor.close()
# close connection
conn.close()
利用sql语句来向表里插入数据,我们需要定义两个函数,其中一个是选择已有的表,另一个函数是插入数据
def select_query(sql):
global conn, cursor
conn = open_database(database='weibo.db')
cursor = conn.cursor()
# issue SQL command
cursor.execute(sql)
# fetch the result
values = cursor.fetchall()
# print(values)
return values
def insert_record(table, data):
global conn, cursor
# make sure the cursor is valid
# check table here
# get next RID
values = select_query('SELECT * FROM WEIBO')
rid = len(values)+1
rid_tuple = (rid,)
sql = 'INSERT INTO {} VALUES{}'.format(table, rid_tuple+data)
# print("SQL: %s" % sql)
cursor.execute(sql)
print('Records {} inserted successfully'.format(rid))
return rid
if __name__ == '__main__':
data = ("我是内容","我是发布时间","我是用户名","我是用户等级","我是用户类别","我是转发量","我是点赞数","我是评论数")
insert_record('WEIBO', data)
close_database()
插入一条数据
我们可以分别设置删除单条数据和多条数据
# rid: record id
def delete_record(table, record_id):
global conn, cursor
conn = open_database(database='weibo.db')
cursor = conn.cursor()
sql = 'DELETE FROM {} WHERE RID={}'.format(table, record_id)
cursor.execute(sql)
print('Records {} deleted successfully'.format(record_id))
# begin: start from which record id
# end: end with which record id
def delete_records(table, begin, end):
global conn, cursor
conn = open_database(database='weibo.db')
cursor = conn.cursor()
for offset in range(end - begin + 1):
rid = begin + offset
sql = 'DELETE FROM {} WHERE RID={}'.format(table, rid)
cursor.execute(sql)
print('Records {} deleted successfully'.format(rid))
首先插入20条数据
删除单条数据
delete_record('weibo', 1)
close_database()
删除多条数据
delete_records('weibo', 6,20)
close_database()
好了,关于数据存储增删查改的操作我们都已经学习完毕,这是很重要的一步,即使你会爬取数据,你也要用简洁明了的方式把它存储起来,供我们自然语言处理以及一些其他的数据分析操作
另外,其实把数据存储在Excel中也是一种可取的方法,这种方法后续我们会学习的
最后,关注一波吧!