如何让Flask网页抓取应用在页面刷新时展示最新抓取结果?
问题解答
这个现象正常吗?
这是完全正常的,问题出在你的代码执行时机上。
如果网页抓取代码写在Flask应用初始化的顶层(也就是路由函数index()外面),那它只会在应用进程启动时执行一次——因为这部分代码属于应用的初始化逻辑,只会在Waitress加载你的Flask应用时运行一遍,之后所有请求都会复用这次抓取的旧数据,不管怎么刷新页面都不会重新执行。
如何实现每次刷新都重新抓取?
解决方法很直接:把网页抓取逻辑移到路由函数内部,也就是index()函数里面。这样每次用户访问/路由(刷新页面)时,都会触发一次新的抓取操作,获取最新的数据。
修改后的代码示例:
from waitress import serve from flask import Flask, render_template import requests app = Flask(__name__) @app.route("/") def index(): # 把网页抓取代码移到这里,每次请求都会执行 news_sites = [] # 示例变量,根据你的实际需求替换 # --- 你的网页抓取逻辑开始 --- response = requests.get("目标网页的URL") # 这里添加解析响应、提取目标数据的代码,最终赋值给news_sites等变量 # --- 你的网页抓取逻辑结束 --- return render_template("info.html", news_sites=news_sites) if __name__ == "__main__": serve(app, host='0.0.0.0', port=8080)
额外注意事项
- 反爬风险:频繁刷新页面会导致频繁请求目标网站,容易触发对方的反爬机制(比如IP封禁)。如果数据不需要实时更新,可以给抓取逻辑加缓存,比如用
functools.lru_cache(记得设置合理的过期时间)或者外部缓存工具(如Redis),平衡实时性和服务器压力。 - 异常处理:建议给
requests请求添加异常捕获(比如requests.exceptions.RequestException),避免抓取失败时直接导致页面崩溃,给用户返回友好的错误提示。
内容的提问来源于stack exchange,提问作者KMFR
相关产品推荐
相关产品推荐

