如何创建while循环持续检测列表中爬取数据变化并触发Telegram通知
修改后可增量通知的爬虫代码
核心修改逻辑
- 新增无限循环逻辑,按设定周期轮询目标站点
- 保留上一次爬取的全量内容列表,每次仅对比新增内容推送通知
- 新增间隔休眠配置,避免请求频率过高触发站点反爬
- 修复原代码中缩进错误、TG请求参数缺失问题
完整可运行代码
import time from bs4 import BeautifulSoup import requests from urllib.request import Request, urlopen from urllib.parse import quote pages = ["movies", "series"] # 存储上一次爬取的内容,初始化空列表 old_film_list = [] # Telegram配置 请替换为你自己的参数 TG_BOT_TOKEN = "你的Bot Token" TG_CHAT_ID = "你的聊天ID" while True: current_film_list = [] # 爬取当前站点内容 for page in pages: try: req = Request(f"https://www.thenetnaija.com/videos/{page}", headers={'User-Agent': 'XYZ/3.0'}) webpage = urlopen(req, timeout=10) b4 = BeautifulSoup(webpage, "html.parser") movie_list = b4.find_all("div", {"class" : "video-files"}) for allContainers in movie_list: filmName = allContainers.find('img').get('alt') current_film_list.append(filmName) except Exception as e: print(f"爬取{page}页面出错: {e}") continue # 对比获取新增内容 added_films = [film for film in current_film_list if film not in old_film_list] # 有新增内容就推送TG if added_films: print(f"检测到{len(added_films)}条新增内容,开始推送") for film in added_films: # 对内容做URL编码避免特殊字符导致请求失败 encoded_text = quote(f"新增资源更新:\n{film}") tg_url = f"https://api.telegram.org/bot{TG_BOT_TOKEN}/sendMessage?chat_id={TG_CHAT_ID}&text={encoded_text}" try: requests.get(tg_url, timeout=10) # 避免TG接口限流,加短休眠 time.sleep(1) except Exception as e: print(f"推送{film}出错: {e}") # 更新旧列表为当前最新列表 old_film_list = current_film_list.copy() else: print("本次轮询无新增内容") # 轮询间隔 这里设为30分钟 可自行修改 单位秒 time.sleep(1800)
注意事项
- 首次运行会将当前站点所有内容视为新增内容推送,之后仅推送更新内容
- 可根据自身需求调整
time.sleep的参数修改轮询频率,不建议设置过短 - 可自行添加异常捕获逻辑提升程序稳定性,避免网络波动导致程序退出
内容的提问来源于stack exchange,提问作者Chigstardan
相关产品推荐
相关产品推荐

