Python网络爬虫实战——实验7:Python使用apscheduler定时采集任务实战

news2024/12/26 23:33:54

【实验内容】

本实验主要介绍在Django框架中使用APScheduler第三方库实现对数据的定时采集。

【实验目的】

1、掌握APScheduler库的使用;
2、学习在Django中实现多个定时任务调度;

【实验步骤】

步骤1 Apscheduler简介与特点
步骤2 Apscheduler基本概念
步骤3 在Django中实现多个定时任务调度

步骤1:Apscheduler简介与特点
(1) 简介
APScheduler(Advanced Python Scheduler)是一个用于 Python 的灵活的定时任务调度库。它允许您在应用程序中安排执行函数或方法,以便在指定的时间间隔、日期、天或其他规则触发它们。

(2) 特点

  • 多种触发器:APScheduler支持多种触发器,包括日期时间触发、定时间隔触发、固定日期触发、定时器触发和 Cron
    触发等。这使得您可以为不同的任务定义不同的触发规则。
  • 可扩展性:它允许您创建多个定时任务,定义自己的触发器和任务,并将其集成到您的应用程序中。
  • 并发控制:APScheduler可以管理并发执行的任务,确保任务不会重叠执行。
  • 持久化存储:您可以将任务存储在持久化存储中,以便在应用程序重启时保持任务状态。
  • 灵活性:APScheduler提供了多种方式来调度任务,如在单线程应用程序中,通过线程池或进程池,以及在分布式系统中。
  • 轻量级:APScheduler是一个轻量级库,易于集成到各种类型的 Python 应用程序中。
  • 支持异步:它还支持在异步应用程序中使用,例如基于asyncio的Python应用。

步骤二:Apscheduler基本概念
(1) 调度器(scheduler)
/========================================================================================================/
使用示例:
-***********************************************************************
(2) 作业存储(job store)
/===================================================================================================/

(3) 执行器(executer)
​在APScheduler中,执行器(Executor)是用于执行调度的组件。执行器负责管理调度的任务,并决定何时以及如何执行它们。APScheduler提供了不同类型的执行器,以满足不同的需求。
/===============================================================================================/
使用示例:
-***********************************************************************
(4) 触发器(trigger)
-**************************************************************************

步骤3:在Django中实现多个定时任务调度
(1) 安装
pip install django-xxxxx
(2) 注册app
在settings.py中注册按如下图所示注册app。
-***************************************************************************

(3) 数据库连接配置
/==================================================================================================/
-***************************************************************************
运行python manage.py migrate会自动生成下列2表:在这里插入图片描述创建超级用户后可直接进入后台管理任务调度,如下图所示:
-**********************************************************************

(4) 创建定时任务
以湖北为例
-**********************************************************************
导入BackgroundScheduler类,这是APScheduler中用于在应用程序的后台运行的调度器。通过调用start()方法,启动后台调度器。使用了DjangoJobStore作为任务存储(jobstore)。/==============
===========================================================================================
/
-*********************************************************************
使用 ThreadPoolExecutor并发执行多个任务,提高效率。在上述代码中,并发执行了两个任务
/==============================================================/


这是一个运行指定目录文件下的采集数据脚本的函数 run_program。
命令行执行:/==================================
=======
/
重试机制:使用 retries 变量实现了一个简单的重试机制,即如果命令执行失败,会进行最多两次的重试。这有助于应对一些暂时性的问题。
错误处理: /===================================
=========
/
-**************************************************************************
将文件运行的结果存储到数据库中
-**************************************************************************

(5) 定时运行结果
定时任务执行记录,如下图所示在这里插入图片描述脚本执行记录
-**********************************************************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1415369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源】基于JAVA语言的公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

字符串相关的函数和内存块相关函数

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

概念抽取:构建认知基础的关键步骤

目录 前言1 概念抽取任务定义1.1 概念知识图谱的关系定义1.2 实体与概念的紧密关联1.3 多样的概念关系 2 概念在认知中的重要角色2.1 语言理解的基础2.2 上下位关系的深化理解 3 概念抽取方法3.1 基于模板的抽取3.2 基于百科的抽取3.3 基于机器学习的方法 4 应用4.1 自然语言理…

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

C++力扣题目62--不同路径 63--不同路径II 343--整数拆分 96--不同的二叉搜索树

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。…

leetcode hot100岛屿数量

本题中要求统计岛屿数量(数字1的上下左右均为1,则是连续的1,称为一块岛屿)。那么这种类型题都是需要依靠深度优先搜索(DFS)或者广度优先搜索(BFS)来做的。这两种搜索,实际…

DS:带头双向循环链表的实现(超详细!!)

创作不易,友友们给个三连吧!!! 博主的上篇文章介绍了链表,以及单链表的实现。 单链表的实现(超详细!!) 其实单链表的全称叫做不带头单向不循环链表,本文…

uni-app 接口封装,token过期,自动获取最新的token

一、文件路径截图 2、新建一个文件app.js let hosthttp://172.16.192.40:8083/jeecg-boot/ //本地接口 let myApi {login: ${host}wx/wxUser/login, //登录 } module.exports myApi 3、新建一个文件request.js import myApi from /utils/app.js; export const r…

Linux ---- Shell编程之函数与数组

目录 一、函数 1、函数的基本格式 2、查看函数列表 3、删除函数 4、函数的传参数 5、函数返回值 实验: 1.判断输入的ip地址正确与否 2. 判断是否为管理员用户登录 6、函数变量的作用范围 7、函数递归(重要、难点) 实验&#xff1…

P1024 [NOIP2001 提高组] 一元三次方程求解————C++

目录 [NOIP2001 提高组] 一元三次方程求解题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 解题思路Code运行结果 [NOIP2001 提高组] 一元三次方程求解 题目描述 有形如: a x 3 b x 2 c x d 0 a x^3 b x^2 c x d 0 ax3bx2cxd0 这样的一个一元…

【2024-01-27可用】NVM安装太慢,镜像地址失效

安装nvm时, Could not retrieve https://registry.npm.taobao.org/latest/SHASUMS256.txt. 解决如下 ### 具体配置 安装路径 root: D:\Program Files\nvm path: D:\Program Files\nodejs镜像地址 node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror:…

STL容器大总结区分(上)

如图所示 ,按大小说明其重要性 那就先说两个最重要的: vector---数组 list-----链表 vector 基本概念 功能: vector 数据结构和 数组非常 相似 ,也称为 单端数组 vector 与普通数组区别: 不同之处在于数组是静态空间&…

vue3添加pinia

概述:Pinia 是一个专为 Vue.js 开发的状态管理库。Vue.js 是一个流行的 JavaScript 框架,用于构建用户界面。Pinia 旨在提供一个简单、灵活且性能高效的状态管理方案,使开发者能够更容易地管理应用的状态。 以下是 Pinia 的一些特点和概念&a…

在 React 组件中使用 JSON 数据文件,怎么去读取请求数据呢?

要在 React 组件中使用 JSON 数据&#xff0c;有多种方法。 常用的有以下几种方法&#xff1a; 1、直接将 JSON 数据作为一个变量或常量引入组件中。 import jsonData from ./data.json;function MyComponent() {return (<div><h1>{jsonData.title}</h1>&…

Vue3中ElementPlus组件二次封装,实现原组件属性、插槽、事件监听、方法的透传

本文以el-input组件为例&#xff0c;其它组件类似用法。 一、解决数据绑定问题 封装组件的第一步&#xff0c;要解决的就是数据绑定的问题&#xff0c;由于prop数据流是单向传递的&#xff0c;数据只能从父流向子&#xff0c;子想改父只能通过提交emit事件通知父修改。 父&a…

第十八讲_HarmonyOS应用开发实战(实现电商首页)

HarmonyOS应用开发实战&#xff08;实现电商首页&#xff09; 1. 项目涉及知识点罗列2. 项目目录结构介绍3. 最终的效果图4. 部分源码展示 1. 项目涉及知识点罗列 掌握HUAWEI DevEco Studio开发工具掌握创建HarmonyOS应用工程掌握ArkUI自定义组件掌握Entry、Component、Builde…

Leetcode—2942. 查找包含给定字符的单词【简单】

2023每日刷题&#xff08;一零一&#xff09; Leetcode—2942. 查找包含给定字符的单词 实现代码 class Solution { public:vector<int> findWordsContaining(vector<string>& words, char x) {vector<int> ans;for(int i 0; i < words.size(); i)…

JDK8新特性:Stream

Stream 认识Stream 也叫Stream流&#xff0c;是jdk8开始新增的一套API&#xff08;java.util.stream.*&#xff09;&#xff0c;可以用于操作集合或者数组的数据。优势&#xff1a;Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更强大&#xff0c;更加简…

TCS34725使用记录

TCS34725使用记录 1、IIC通信 1、tcs34725硬件通信采用标准的IIC协议&#xff1b; 2、在寄存器读写上需要注意一下&#xff0c;在读写寄存时&#xff0c;需要将地址最高位置1&#xff1b; I2C_SendByte(reg|0x80);//一般的iic操作寄存器都是直接传入reg 2、配置与数据读取 …

简单介绍----微服务和Spring Cloud

微服务和SpringCloud 1.什么是微服务&#xff1f; 微服务是将一个大型的、单一的应用程序拆分成多个小型服务&#xff0c;每个服务负责实现特定的业务功能&#xff0c;并且可以通过网络通信与其他服务通信。微服务的优点是开发更灵活&#xff08;不同的微服务可以使用不同的开…