python爬虫模块之数据存储模块
数据存储模块的话,目前我这用的比较多的是存储到mysql,所以下面的这个例子也是保存到mysql,用到了ORM映射的SQLAlchemy
,(ORM:Object-Relational Mapping,把关系数据库的表结构映射到对象上),使用create_engine()
来初始化数据库连接。
SQLAlchemy用一个字符串表示连接信息:
'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
然后使用pandas tosql进行了保存,对于简单的数据保存,尤其是批量存储来说效率还是提高的,
也不需要写原生的sql语句但是如果有其他复杂的操作就只能sqlalchemy或pymysql配合用了
关于大概过程就是把字典list类型的数据转换成dataframe之后在操作,需要强调一下的是if_exists参数的含义
下面说一下关于if_exists的几个参数,都是对表来说的不是对于数据
fail的意思如果表存在,啥也不做
replace的意思,如果表存在,删了表,再建立一个新表,把数据插入
append的意思,如果表存在,把数据插入,如果表不存在创建一个表!
然后下面就看代码的实现吧
# _*_coding:utf-8 _*_ import pandas as pd from .config import * from sqlalchemy import create_engine class DataOutput(object): def __init__(self): # 引擎格式 mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8 self.conn=create_engine(f'{DB_TYPE}+mysqldb://{USER}:{PASSWD}@{HOST}:{PORT}/{DataBase}?charset={Charset}') def store_data(self, data_dicts): if data_dicts is None: return None # data_dicts 保存成字典类别形式方便转换dataframe df=pd.DataFrame(data_dicts) pd.io.sql.to_sql(df, "sns_insight_log", con=self.conn, if_exists="append", index=False)