学习如何存储你爬取的数据

今天来学习下另一个库sqlite3,它可以用来操作数据库,可以将我们爬取后的数据存储起来。这是很重要的一步,即使你会爬取数据,你也要用简洁明了的方式把它存储起来,供我们自然语言处理以及一些其他的数据分析操作

欢迎关注公众号:老白和他的爬虫

1.安装Datum-Lite

在操作数据库的过程中,我们需要一个可视化的软件来展示,之前使用Windows系统时,我使用的是SQLite来显示的,非常方便,但是现在换了苹果电脑,使用SQLite不是很方便,于是我早到了另外一款适合mac的免费的工具——Datum-Lite,这个在AppStore就可以下载到,Windows的用户可以直接点击SQLite去下载。

2.创建一个表

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创建了一个表!

3.打开和关闭表

上一段代码块中的这两句你需要注意一下

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()

4.插入数据

利用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()
    

插入一条数据

5.删除数据

我们可以分别设置删除单条数据和多条数据

# 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中也是一种可取的方法,这种方法后续我们会学习的

最后,关注一波吧!

你可能感兴趣的:(学习如何存储你爬取的数据)