在vps的centos系统中用Python和青龙检测网页更新

环境:vps,centos7,python3.8.10,青龙面板(用宝塔安装)

任务:用python代码,监控一个网站页面是否有更新(新帖子),若有,则提醒(发布到wordpress或者发送到微信)。

备注:本程序检测更新情况,没有用到数据库。而是采用列表对比的方法,即上次的情况存到列表pre_list中,一分钟后,将本次的情况存到列表now_list中,然后对比两个列表,如果now_list中有,但pre_list无,即表示有了新帖子。

所以,在检测程序A.py中,使用了while无限循环。

在实际运行中,出现了一个问题,就是长时间运行后,程序会报错[Errno 101] Network unreachable'),我猜测是长时间高频率访问网站,被网站强制断网了(但还不是反爬非常严重,过一会再运行就又能成功了)。

于是,我设计这样一个思路。

编写一个程序B.py,使用青龙半小时运行一次B.py,B.py的作用是用于查看程序A.py是否处于运行中,如果A.py在运行,就什么都不做,如果A.py终止了,则启动A.py。

下面分别来实现A.py和B.py。

#A.py,循环检测网页是否有更新(新帖子)import requests
from bs4 import BeautifulSoup
import time
from lxml import etree
#from wordpress_xmlrpc import Client, WordPressPost
#from wordpress_xmlrpc.methods.posts import NewPost
import datetime
import jsondef pushplus_notify(title,content):print('将消息发送至WX')#略def Get_Content(url):print('得到新帖子的内容')#略proxies = {'http': "socks5://127.0.0.1:10808",'https': "socks5://127.0.0.1:10808"}headers={#略
}pre_list=[]
url='https://xxx.com'
r=requests.get(url,headers=headers,proxies=proxies)
bs = BeautifulSoup(r.text, 'html.parser')
id_nodes=bs.find_all('a',attrs={"class":'xxx'})
for id_node in id_nodes:pre_list.append(id_node.get('href'))#初始化pre_listprev_time = time.time()
while True:curr_time = time.time()if curr_time - prev_time >= 60:url='https://xxx.com'r=requests.get(url,headers=headers,proxies=proxies)bs = BeautifulSoup(r.text, 'html.parser')id_nodes=bs.find_all('a',attrs={"class":'xxx'})now_list=[]for id_node in id_nodes:now_list.append(id_node.get('href'))new_elements=[x for x in now_list if x not in pre_list]#now_list(一般用于存放本次新数据)中有、但pre_list(一般用于存放上次数据<旧数据>)中没有的元素if len(new_elements)>0:print('有新贴了,'+str(new_elements))pre_list=now_listprev_time = curr_time#获取新帖内容(为了演示方便,我只取新帖子们的第一个帖子[因为有可能有多个新帖])good_content=Get_Content(new_elements[0])good_content=good_content.replace('\\','')now = datetime.datetime.now()title = now.strftime("%Y-%m-%d_%H-%M-%S")pushplus_notify(title,good_content)time.sleep(2)time.sleep(2)

下面是使用青龙每半小时运行、检测A.py程序是否还在正常运行的B.py。

import psutil
import subprocessdef check_process(process_name):for proc in psutil.process_iter(['pid', 'name', 'cmdline']):if proc.info['name'] == 'python3' and len(proc.info['cmdline']) > 1 and proc.info['cmdline'][1] == process_name:return Truereturn Falsedef start_process(script_path):subprocess.Popen(['python3', script_path])# 指定要检测的脚本名
script_name = "A.py"  # 替换为实际脚本名称
script_path = "A.py"  # 替换为实际脚本路径# 检测进程是否在运行
if check_process(script_name):print(f"进程 {script_name} 正在运行.")
else:print(f"进程 {script_name} 没有在运行,正在启动...")start_process(script_path)print(f"进程 {script_name} 已启动.")

说明:

(1)可以使用ps -ef | grep python3观察A.py是否正在运行

参考我的文章:

记录centos中操作(查找、结束、批量)进程以及crontab定时写法的知识-CSDN博客

(2)每个半小时运行的crontab写法

(3)不要忘记在青龙的“依赖管理”中添加相应的库

(4)通过青龙将A.py和B.py放入VPS中,无需使用FileZilla Client。

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

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

相关文章

【数据结构】二叉树的认识与实现

目录 二叉树的概念&#xff1a; 二叉树的应用与实现&#xff1a; 二叉树实现接口&#xff1a; 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 二叉树节点个数​编辑 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点​编辑 二叉树前序遍…

XSS+CSRF攻击

一、前言 在DVWA靶场的XSS攻击下结合CSRF攻击完成修改密码 也就是在具有XSS漏洞的情况下实施CSRF攻击 二、实验 环境配置与上一篇博客一致&#xff0c;有兴趣可以参考CSRF跨站请求伪造实战-CSDN博客 首先登录DVWA&#xff0c;打开XSS模块 name随便输入&#xff0c;message…

HQL面试题练习 —— 合并数据

题目来源&#xff1a;京东 目录 1 题目2 建表语句3 题解 1 题目 已知有数据 A 如下&#xff0c;请分别根据 A 生成 B 和 C。 数据A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中&#xff0c;申请权限的步骤有些繁琐&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数&#xff0c;今天就借助 ActivityResultLauncher 来简化书写。 步骤1&#xff1a;创…

基于FPGA的VGA协议实现

文章目录 一、VGA介绍1.1 VGA原理1.2VGA电路 二、配置三、实现3.1 字符显示3.2图片显示 四、代码4.1.vga驱动模块4.2数据模块4.3按键消抖模块4.4顶层模块4.5TCL引脚绑定 参考 一、VGA介绍 1.1 VGA原理 VGA接口 最主要的几根线&#xff1a; VGA其实就是相当于一块芯片&#…

gcc g++不同版本切换命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切换 gcc/g 版本_ubuntu降低g版本-CSDN博客

YOLOv10尝鲜测试五分钟极简配置

最近清华大学团队又推出YOLOv10&#xff0c;真是好家伙了。 安装&#xff1a; pip install supervision githttps://github.com/THU-MIG/yolov10.git下载权重&#xff1a;https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 预测&#xff1a; from ult…

Superset,基于浏览器的开源BI工具

BI工具是数据分析的得力武器&#xff0c;目前市场上有很多BI软件&#xff0c;众所周知的有Tableau、PowerBI、Qlikview、帆软等&#xff0c;其中大部分是收费软件或者部分功能收费。这些工具一通百通&#xff0c;用好一个就够了&#xff0c;重要的是分析思维。 我一直用的Tabl…

【HMGD】STM32/GD32 CAN通信

各种通信协议速度分析 协议最高速度(btis/s)I2C400KCAN1MCAN-FD5M48510MSPI36M CAN协议图和通信帧 CubeMX CAN配置说明 CAN通信波特率 APB1频率 / 分频系数 /&#xff08;BS1 BS2 同步通信段&#xff09;* 1000 ​ 42 / 1 / (111) * 1000 ​ 14,000 KHz ​ 1400000…

吉林大学计科21级《软件工程》期末考试真题

文章目录 21级期末考试题一、单选题&#xff08;2分一个&#xff0c;十个题&#xff0c;一共20分&#xff09;二、问答题&#xff08;5分一个&#xff0c;六个题&#xff0c;一共30分&#xff09;三、分析题&#xff08;一个10分&#xff0c;一共2个&#xff0c;共20分&#xf…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引⽤操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

汇编:字符串的输出

在16位汇编程序中&#xff0c;可以使用DOS中断21h的功能号09h来打印字符串&#xff1b;下面是一个简单的示例程序&#xff0c;演示了如何在16位汇编程序中打印字符串&#xff1a; assume cs:code,ds:data ​ data segmentszBuffer db 0dh,0ah,HelloWorld$ //定义字符串 data …

Flutter仿照微信实现九宫格头像

一、效果图 2、主要代码 import dart:io; import dart:math;import package:cached_network_image/cached_network_image.dart; import package:flutter/material.dart;class ImageGrid extends StatelessWidget {final List<String> imageUrls; // 假设这是你的图片URL…

关于Iterator 和ListIterator的详解

1.Iterator Iterator的定义如下&#xff1a; public interface Iterator<E> {} Iterator是一个接口&#xff0c;它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下&#xff1a; forEachRemaining(Consumer<? super E> act…

VS2022通过C++网络库Boost.Asio创建一个简单的同步TCP服务器和客户端

Boost.Asio是一个用于网络和异步编程的C库。它提供了一种跨平台的方式来处理网络编程和异步操作&#xff0c;使开发人员能够创建高性能的网络应用程序&#xff0c;asio几乎支持所有你能够想到的网络协议&#xff0c;比如tcp、udp、ip、http、icmp等&#xff0c;C通过asio库可以…

浅谈网络通信(1)

文章目录 一、认识一些网络基础概念1.1、ip地址1.2、端口号1.3、协议1.4、协议分层1.5、协议分层的2种方式1.5.1、OSI七层模型1.5.2、TCP/IP五层模型[!]1.5.2.1、TCP/IP五层协议各层的含义及功能 二、网络中数据传输的基本流程——封装、分用2.1、封装2.2、分用2.2.1、5元组 三…

python冰雹序列的探索与编程实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、冰雹序列的奥秘 二、编程实现冰雹序列 三、测试与验证 四、总结与展望 一、冰雹序列的…

openEuler 22.03 LTS SP3源码编译部署OpenStack-Caracal

openEuler 22.03 LTS SP3源码编译部署OpenStack-Caracal 说明机器详情安装操作系统注意事项基础准备Controller节点 && Compute节点 && Block节点关闭防火墙关闭selinux设置静态IP更新安装前准备Controller节点 && Compute节点 && Block节点设…

第十课,while循环

一&#xff0c;认识循环是什么 循环普遍存在于日常生活中&#xff0c;同样&#xff0c;在程序中&#xff0c;循环功能也是至关重要的基础功能。 当程序需要重复执行某一段代码&#xff0c;利用循环可以轻松完成工作 例如我要你打印100次上课&#xff0c;直接写100次print&…

python调用阿里云通义千问(q-wen-max)API-只能总结pdf文档内容

文章目录 通义千问插件PDF解析插件调用案例通义千问插件 Dashscope插件功能能够使得大模型的生成内容与外部三方应用结合,使得模型生成的内容更加准确和丰富,模型将拥有更好的生成能力。您也可以通过开发自定义插件,来使得模型生成更符合您预期的结果。 使用插件功能,大模…