toolkit-frame之toolkit-sprider 防止重复采集的数据库(Python)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: toolkit-frame之toolkit-sprider 防止重复采集的数据库(Python)

对于采集的图片等资源如果采集过了再一次采集就不对了,浪费硬盘也浪费采集的时间,各种浪费,针对这个问题做了个数据库设计,防止同样的数据二次采集。

因为是pytho语言所以框架采用SQLAlchemy。这玩意网上介绍有很多,洒家就不介绍了。不清楚的问问度娘。看代码吧。

from sqlalchemy import Column
from sqlalchemy.types import  String
from main.base.BaseEntity import BaseEntity
class SpriderEntity(BaseEntity):
    __tablename__ = 'sprider_pic'
    sprider_base_url = Column(String, primary_key=True)
    sprider_url = Column(String)
    sprider_pic_index = Column(String)
    sprider_pic_title = Column(String)
    sprider_pager_index = Column(String)
    sprider_type = Column(String)
    create_datetime = Column(String)

当时目光短浅了以为只能采集pic就把名写成PIC了。

另外一个核心就是数据的保存和查询,不废话直接代码:

from sqlalchemy import func
from main.base.BaseFrame import BaseFrame
from main.base.SqliteAccess import SqliteAccess
from main.base.MySqlAccess import MySqlAccess
import pymysql
from sprider.object.SpriderEntity import SpriderEntity
from main.plugin.log.Logger import Logger
pymysql.install_as_MySQLdb()
class SpriderAccess(SqliteAccess):
    # region 保存采集信息 zhangyu-2019-7-18
    def save_sprider(self, model_entity):
        session = SqliteAccess.connection()
        try:
            session.add(model_entity)
            session.commit()
            return True
        except Exception as e:
            Logger.error("save_sprider:保存数据出现 错误" + str(e))
            session.rollback()
            return False
        finally:
            session.close()
    # endregion
    def query_sprider_entity_by_urlandindex(self, sprider_url, pic_index):
        session = SqliteAccess.connection()
        try:
            entity = session.query(SpriderEntity).filter_by(sprider_url=str(sprider_url),
                                                            sprider_pic_index=str(pic_index)).first()
            return entity
        except Exception as e:
            BaseFrame.__err__("query_sprider" + str(e))
            return None
        finally:
            session.close()
    def query_sprider_entity_by_urlandtitle(self, sprider_url, sprider_title):
        session = SqliteAccess.connection()
        try:
            entity = session.query(SpriderEntity).filter_by(sprider_url=sprider_url,
                                                            sprider_pic_title=sprider_title).first()
            return entity
        except Exception as e:
            BaseFrame.__err__("query_sprider_entity_by_urlandtitle"+str(e))
            return None
        finally:
            session.close()
    def delete_sprider_info(self, sprider_url, sprider_title):
        session = MySqlAccess.connection()
        try:
            lottery_entity = session.query(SpriderEntity).filter_by(sprider_url=sprider_url,
                                                                    sprider_pic_title=sprider_title).first()
            if lottery_entity is None:
                return True
            session.delete(lottery_entity)
            session.commit()
            return True
        except:
            session.rollback()
            return False
        finally:
            session.close()
        pass
    def find_pager_by_url_and_type(self, sprider_base_url, sprider_type):
        session = SqliteAccess.connection()
        try:
            # entity = session.query(SpriderEntity).filter_by(sprider_base_url=sprider_base_url,
            #                                                 sprider_type=sprider_type).max()
            entity = session.query(func.max(SpriderEntity.sprider_pager_index)).filter_by(
                sprider_base_url=sprider_base_url, sprider_type=sprider_type).group_by(
                SpriderEntity.sprider_pager_index).all()
            if len(entity) == 0:
                number = 0
            else:
                for e in entity:
                    number = (e[0])
            return int(number)
        except Exception as e:
            Logger.error(str(e))
            return 0
        finally:
            session.close()
        pass
    def query_sprider(self):
        session = SqliteAccess.connection()
        try:
            sprider_list = session.execute("SELECT * FROM sprider_pic LIMIT 10 OFFSET 1").fetchall()
            return sprider_list
        except Exception as e:
            return None, str(e)
        finally:
            session.close()
        pass

里面有一些我框架的东西还望见谅!

 

数据库是sqlit3的,原始文件我就不上传了,自己动手搞搞,锻炼一下。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
132 68
|
17天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
128 15
|
2月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
2月前
|
存储 缓存 Shell
你知道 Python 其实自带了小型数据库吗
你知道 Python 其实自带了小型数据库吗
27 2
你知道 Python 其实自带了小型数据库吗
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
45 4
|
2月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
70 3
|
2月前
|
数据库连接 Linux 数据库
GBase 8s数据库连接 – Python
GBase 8s数据库连接 – Python
|
2月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
2月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作