【Airflow】构建爬虫任务系统

爬虫脚本太多了需要进行管理一下,领导决定使用airflow
我了解了一下这个平台是用来做任务调度。
是一个ETL工具
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程
在这里插入图片描述
这里是一个github的地址

https://github.com/apache/airflow

这里是官方文档

https://airflow.apache.org/docs/apache-airflow/stable/index.html

这里是我学习的视频资料

https://www.bilibili.com/video/BV19f4y1V7UG/
博主的视频有一些老了,不过也是可以学习的。

先看一下成果吧
在这里插入图片描述

这里是首页记录了,我得dags任务
dags就相当于我得一个爬虫任务,
在这里插入图片描述
我们进入这个dag里面,可以看到
有4个小任务(task)和一task执行的状态,还有一些基本信息。
在这里插入图片描述
可以看每一个task的日志,如果发生问题也可以更方便的定位问题的。
每个dag都有很多配置,比如定时任务,失败重试,自动拉起,报警邮件等功能。
以后再也不用上服务器去看日志了
嘻嘻嘻嘻嘻

conda环境安装

这里需要一个干净的环境,我使用的miniconda
来到 conda网站

https://docs.conda.io/projects/miniconda/en/latest/miniconda-other-installer-links.html

在这里插入图片描述
这里选择linux 的 我是用的是python3.8
然后复制这个链接地址。
在这里插入图片描述
然后我们到服务器上将这个包下好。
执行命令

wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-x86_64.sh

在这里插入图片描述
下好之后。
安装好之后,执行

bash Miniconda3-py38_23.9.0-0-Linux-x86_64.sh

然后一直yes 就ok
在这里插入图片描述
conda这里就装好了
在这里插入图片描述
也带着python。然后我们创建一个环境

conda create -n airflow  # 创建环境
conda activate airflow   # 激活环境

这样环境就差不多了
安装一下airflow

 conda install apache-airflow

在这里插入图片描述
这里会依赖很多包
在这里插入图片描述
执行airflow命令,出现这些,说明airflow已经装好了。

配置airflow

找到你得airflow路径,
里面会有一个airflow.cfg文件
在这里插入图片描述
这里是配置dags的文件路径
在这里插入图片描述
这里默认使用的是sqlite数据库,
后续也可以改成mysql

https://blog.csdn.net/qq_43439214/article/details/129898191
这个博主的文章很不错,将airflow的数据库换成了mysql

我这里就先用默认的了,
执行命令

airflow db init 

在这里插入图片描述
出现下面内容说明数据库已经初始化好了。
执行下面命令进行创建用户

airflow users create --username zhang --firstname zhang --lastname zhang --role Admin --email  airflow@example.com

并为其用户设置密码。
配置好了之后
我们开一个会话
在这里插入图片描述
来通过webserver开启 web服务,这里在要访问你得公网地址默认端口是8080
在这里插入图片描述
到这里来到了ui界面输入,你刚刚创建的用户名和密码。
在这里插入图片描述
来到这里了。
这样我们的配置基本就没问题了。

举个例子

来举一个例子,
来写一个dags看一下。

from __future__ import annotations
# [START tutorial]
# [START import_module]
import os
import sys
from datetime import datetime, timedelta
from textwrap import dedent
from airflow.operators.python import PythonOperator, BranchPythonOperator# The DAG object; we'll need this to instantiate a DAG
from airflow import DAG# Operators; we need this to operate!
from airflow.operators.bash import BashOperator# [END import_module]
# [START instantiate_dag]def first_task():print("这里是first_task")print("这里是first_task")print("这里是first_task")print("这里是first_task")print("这里是first_task")def second_task():print("这里是second_task")print("这里是second_task")print("这里是second_task")print("这里是second_task")print("这里是second_task")with DAG(dag_id="test_airflow",default_args={'owner': "guapisansan","depends_on_past": True,"email": ["177664833@qq.com"],"email_on_failure": False,"email_on_retry": False,"retries": 1,"retry_delay": timedelta(minutes=5),},# [END default_args]description="测试一把",schedule_interval='0 15 * * *',  # 设置调度间隔为每天下午六点,catchup=False,start_date=datetime(2023, 10, 23),tags=["test"],
) as dag:first_task_op = PythonOperator(task_id="first_task",python_callable=first_task)second_task_op = PythonOperator(task_id="second_task",python_callable=second_task)first_task_op >> second_task_op

我这里给了一段非常简单的代码。
大概意思就是有两个task,分别是first和second 他们对应的也分别是两个python函数
配置了一些参数,如 description dag的简介, 还有一些参数,可以在官方文档查询。

记不记得我们的airflow.cfg文件里面有一个这个参数
在这里插入图片描述
这里就是我们存放所有 dags的路径。一定要是绝对路径
将刚刚写的脚本放到这个路径下,
然后我们在执行命令

airflow dags list

在这里插入图片描述
这里存在我刚刚的创建的test_airflow
这时候我们在创建一个会话
执行命令

airflow scheduler

这是一个调度命令
这时候我们刷新刚刚的web页面
在这里插入图片描述
发现我们dags已经挂到ui页面上了
我们点进去看看
在这里插入图片描述
看到了我们的子任务task 出现了,
现在需要手动触发一下看看结果。
在这里插入图片描述
点击这个trigger按钮
在这里插入图片描述
可以看到这两个task都执行成功了。
右边的框里面有执行时间,还有一些任务的基础信息,
在这里插入图片描述
在这里插入图片描述
点击小图片查看任务执行的日志,
发现我们print打印出来了,
我这里只是举一个小例子先跑起来,可以根据自己的脚本进行配置等等。
airflow是一个非常好用的任务调度工具,相对于数据处理更好,我们当作爬虫管理系统也可以用。
用它将分散的脚本整理,更加方便观察和调度。

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

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

相关文章

css3 2d转换transform详细解析与代码实例transform

CSS3 Transform是CSS3的一个模块,其目的是为了通过对元素的变形、旋转、缩放、平移等操作,能够更加丰富的展示页面效果。下面是CSS3 Transform的详细解析与代码实例: transform属性 transform属性用于对元素进行变形操作,其属性…

[100天算法】-最长有效括号(day 38)

题目描述 给定一个只包含 ( 和 ) 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2:输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()"来源&#…

Day07 Stream流递归Map集合Collections可变参数

Stream 也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数组的数据。 Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作 public class Demo1 {public stati…

面试算法40:矩阵中的最大矩形

题目 请在一个由0、1组成的矩阵中找出最大的只包含1的矩形并输出它的面积。例如,在图6.6的矩阵中,最大的只包含1的矩阵如阴影部分所示,它的面积是6。 分析 直方图是由排列在同一基线上的相邻柱子组成的图形。由于题目要求矩形中只包含数字…

STM32 音频ADC转wav格式

STM32 音频ADC DAC测试方法_stm32 adc 音频-CSDN博客 STM32--vs1053 WAV录音实现(保存在SD卡)_vs1053 多字节读取-CSDN博客 单片机内部AD实现录音wav文件_adc语音信号采样_天外飞仙CUG的博客-CSDN博客 PCM编码格式_pcm格式-CSDN博客 用ADC编码PCM数据…

SpringCloud微服务 【实用篇】| 认识微服务

目录 一:认识微服务 1. 微服务框架介绍 2. 服务架构演变 3. 微服务技术对比 4. SpringCloud 图书推荐:《巧用ChatGPT快速提高职场晋升力》 一:认识微服务 本课程学习于黑马,会通过分层次学习,分为三部分去讲解微…

数据与视图的完美契合:Vue响应式的交织魅力

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

JavaScript手写题

手动实现map方法(面试:用友、猿辅导、字节) 回调函数接受三个参数。分别为:数组元素,元素索引,原数组本身。map方法执行的时候,会自动跳过未被赋值或者被删除的索引。map方法返回一个新数组&am…

springboo单机多线程高并发防止重复消费的redis方案

springboo单机多线程高并发防止重复消费的redis方案 仅提供方案与测试。 想法:第一次收到userCode时,检查是否在redis中有,如果有,就表明已经消费了,返回抢单失败;否则,就去消费,顺…

adb设备调试常用命令

自从工作越来越忙后,越来越懒得写文章了,趁着1024程序员节,仪式性地写篇文章,分享一下最近调试设备经常用到的adb指令~ 1.查看应用内存占用 1.1 dumpsys meminfo package dumpsys是查看系统服务信息的一个常用指令,可…

30天精通Nodejs--目录与说明

说明 本系列博客主要针对nodejs零基础的小伙伴,涵盖了Node.js从基础到高级的各个方面。 前置条件,有js的基础,了解css和html。 nodejs版本20.8.1。 目录 基础知识 第1天:基础介绍 第2天:模块系统与npm 第3天&#…

从REST到GraphQL:升级你的Apollo体验

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Qt之实现支持多选的QCombobox

一.效果 1.点击下拉列表的复选框区域 2.点击下拉列表的非复选框区域 二.实现 QHCustomComboBox.h #ifndef QHCUSTOMCOMBOBOX_H #define QHCUSTOMCOMBOBOX_H#include <QLineEdit> #include <QListWidget> #include <QCheckBox> #include <QComboBox>…

R语言生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

计算机算法分析与设计(14)---贪心算法(会场安排问题和最优服务次序问题)

文章目录 一、会场安排问题1.1 问题描述1.2 思路分析1.3 例题分析1.4 代码编写 二、最优服务次序问题2.1 问题描述2.2 思路分析2.3 代码编写 一、会场安排问题 1.1 问题描述 假设在足够多的会场里安排一批活动&#xff0c;并希望使用尽可能少的会场。设计一个有效的贪心算法进…

LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理

示例 -- 提醒: 本库输出的坐标,均为 WGS84 坐标系 -- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09 -- 相关链接: https://lbsyun.baidu.com/index.php?titlecoordinate -- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数…

十八、字符串(3)

本章概要 正则表达式 基础创建正则表达式量词CharSequencePattern 和 Matcherfinde()组&#xff08;Groups&#xff09;start() 和 end()Pattern 标记split()替换操作reset()正则表达式与 Java I/0 正则表达式 很久之前&#xff0c;_正则表达式_就已经整合到标准 Unix 工具…

python第三次作业

拿硬币 # 有一堆硬币&#xff0c;每次只能拿一个或者两个&#xff0c;求最少多少次可以拿完硬币 # [10, 8, 5, 3, 27, 99]# 定义如题的带有5个元素的列表&#xff0c;表示五堆硬币 list [10,8,5,3,27,99] # 定义一个变量用来记录拿的次数 get 0 # 将列表遍历,如果元素是双数…

芯片手册自用

UG585 ZYNQ BOOK&#xff1a;Zynq 7000 SoC 技术参考手册 Zynq 7000 SoC Technical Reference Manual • Zynq 7000 SoC Technical Reference Manual (UG585) • 阅读器 • AMD 自适应计算文档门户 (xilinx.com) UG586 MIG:Zynq-7000 SoC 和 7 系列器件内存接口解决方案 ug5…

python网络爬虫实例

目录 1、访问百度 2、输入单词百度翻译 3、豆瓣电影排行榜 4、豆瓣电影top250 5、下载美女壁纸 1、访问百度 from urllib.request import urlopen url"http://www.baidu.com" respurlopen(url)with open("mybaidu.html",mode"w") as f:f.wr…