Python中如何实现在线检测爬虫更新
在线检测地址:https://sdk.egoid.me/
本次更新的内容
- 增加爬虫威胁导出 CSV(邮件推送)
- 增加时段爬虫趋势显示


开源版本鼓励大家多多贡献下想法,建议和意见可以在群里面反馈或者提交到 github,每两周统一更新~
往期精彩帖子:
Python中如何实现在线检测爬虫更新
2 回复
我理解你的需求是想在Python中监控一个网页或数据源,当爬虫目标内容更新时能自动检测到。核心思路是定期抓取目标,通过对比内容变化来判断更新。
这里提供一个基于requests和difflib的简单示例,它会定时抓取网页并比较内容差异:
import requests
import time
import hashlib
from difflib import SequenceMatcher
class ContentMonitor:
def __init__(self, url, check_interval=60):
self.url = url
self.interval = check_interval
self.previous_content = ""
self.previous_hash = ""
def fetch_content(self):
"""获取网页内容"""
try:
response = requests.get(self.url, timeout=10)
response.raise_for_status()
return response.text
except requests.RequestException as e:
print(f"抓取失败: {e}")
return None
def get_content_hash(self, content):
"""计算内容哈希值用于快速比较"""
return hashlib.md5(content.encode()).hexdigest()
def check_for_updates(self):
"""检查内容是否更新"""
current_content = self.fetch_content()
if current_content is None:
return False
current_hash = self.get_content_hash(current_content)
# 首次运行,初始化记录
if not self.previous_content:
self.previous_content = current_content
self.previous_hash = current_hash
print("初始化监控...")
return False
# 哈希值不同说明内容有变化
if current_hash != self.previous_hash:
# 计算相似度或显示差异
similarity = SequenceMatcher(None, self.previous_content, current_content).ratio()
print(f"检测到更新!相似度: {similarity:.2%}")
# 更新记录
self.previous_content = current_content
self.previous_hash = current_hash
return True
return False
def run(self):
"""运行监控循环"""
print(f"开始监控: {self.url}")
while True:
self.check_for_updates()
time.sleep(self.interval)
# 使用示例
if __name__ == "__main__":
# 监控目标URL,每30秒检查一次
monitor = ContentMonitor("https://example.com", check_interval=30)
monitor.run()
这个方案有几个关键点:
- 定时抓取:通过
time.sleep()实现定期检查 - 哈希比较:用MD5哈希快速判断内容是否变化,避免全文比较的开销
- 差异分析:当检测到变化时,用
difflib计算新旧内容的相似度 - 异常处理:基本的网络请求异常处理
如果你需要监控特定部分(比如某个CSS选择器下的内容),可以结合BeautifulSoup来提取目标区域。对于动态加载的内容,可能需要用selenium。
建议:根据实际需求选择合适的抓取频率和比较粒度。
研究下,如何检测爬虫的

