在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.pswp.cn/bicheng/16309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16309.shtml
英文地址,請注明出處:http://en.pswp.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…

嵌入式0基礎開始學習 Ⅲ Linux基礎(1)Linux基本命令

1.APT unbuntu中功能最強大的命令行軟件包管理工具&#xff0c; 用來獲取&#xff0c;安裝&#xff0c;編譯&#xff0c;卸載&#xff0c;查詢軟件包。 工作原理; /etc/apt/sources.list -> 文件 用來指針ubuntu的軟件源服務器…

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…

前端自定義Echarts 圖的時候,重新渲染,頁面還保存原來的數據

自定義 setAxisSingleOption(optionData){var options this.axisSingleOptionoptions.title.text optionData.title.textoptions.xAxis.data optionData.xAxis.dataoptions.legend.data optionData.legend.dataoptions.series optionData.seriesoptions.grid optionData…

【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 …

【C++】哈夫曼編碼:高效的壓縮算法

哈夫曼編碼&#xff1a;高效的壓縮算法 什么是哈夫曼編碼&#xff1f; 哈夫曼編碼是一種用于數據壓縮的無損編碼方法&#xff0c;由David A. Huffman于1952年提出。它利用了字符出現頻率的不均勻性&#xff0c;通過構建最優前綴碼&#xff0c;能夠有效減少數據的冗余&#xf…

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庫可以…

找出第 K 大的異或坐標值

問題 給你一個二維矩陣 matrix 和一個整數 k &#xff0c;矩陣大小為 m x n 由非負整數組成。 矩陣中坐標 (a, b) 的 值 可由對所有滿足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下標從 0 開始計數&#xff09;執行異或運算得到。…

淺談網絡通信(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元組 三…