初学者求助:网站变更监控脚本报Errno 2文件未找到错误
网站变更监控脚本错误修复方案
核心错误原因
第一次运行脚本时,website_content.txt文件还未创建,用"r"只读模式打开不存在的文件,就会触发Errno 2 no such file or directory错误。此外你的代码还有几个逻辑和语法问题,一起修正如下:
具体修复点
- 处理文件不存在场景:用
try-except捕获文件不存在的异常,第一次运行时直接写入当前页面内容作为初始基准值;后续运行再读取已有文件内容对比。 - 修正响应变量名:你用
requests.get()得到的响应对象是r,不是response,所以要把response.txt改成r.text。 - 反转变更判断逻辑:原代码中内容相同时打印“已变更”,逻辑完全反了,应该是内容不同时才提示变更。
- 补全URL协议头:
requests.get()需要完整的URL(比如https://www.myurl.com),只写域名会导致请求失败。
修复后的完整代码
import requests import time Headers = {"user-agent":"my user-agent"} URL = "https://www.myurl.com" # 补全协议头 def monitor_website_changes(): while True: try: r = requests.get(URL, headers=Headers) r.raise_for_status() # 捕获HTTP请求错误 # 尝试读取历史内容 try: with open("website_content.txt", "r") as file: previous_content = file.read() except FileNotFoundError: # 文件不存在时初始化基准内容 with open("website_content.txt", "w") as file: file.write(r.text) print("初始化基准内容完成,开始监控...") time.sleep(1) continue # 判断内容是否变更 if r.text != previous_content: print("网站内容已变更!") with open("website_content.txt", "w") as file: file.write(r.text) else: print("网站内容无变化") time.sleep(1) except requests.exceptions.RequestException as e: print(f"请求失败: {e}") time.sleep(5) # 请求失败时延长重试间隔 monitor_website_changes()
额外说明
- 加入
r.raise_for_status()捕获HTTP请求错误(比如404、500),避免后续处理无效响应。 - 请求失败时增加重试间隔,减少无效请求频率。
- 你导入的
BeautifulSoup未被使用,如果打算监控特定页面元素(而非整个HTML),可以用BeautifulSoup提取目标内容后再对比,避免无关格式变化触发误报。
内容的提问来源于stack exchange,提问作者Riccardo Melis
相关产品推荐
相关产品推荐

