我写的应用程序涉及定期抓取网站并将数据存储在数据库中以查看它是如何随时间变化的。为此,需要每天调用一次抓取功能。
使用time.sleep()
调用或任何类似的跟踪时间的方法劫持了Flask应用,并使用户无法更改他们正在查看的页面。
我想出的另一种跟踪刮刮时间的方法需要重新加载页面:
@app.route("/")
def index():
if (time.time() - last_scrape) > 86400.0:
scrape()
last_scrape = time.time()
return render_template("index.html")
但是,这种方法有两个问题:
有没有办法在不影响应用功能的情况下每天可靠地更新抓取的信息?
答案 0 :(得分:0)
为什么你需要在Flask视图中刮擦?
设置一个单独的进程来执行抓取并将详细信息存储在数据库中。 cron可以轻松触发此脚本,也可以在您的环境中使用任何任务调度程序。
然后在Flask应用中实现一个查询数据库的视图,并根据需要显示已删除的信息。
如果您必须在Flask应用中实施抓取,请将其写为单独的线程。它将花费大部分时间睡眠,并花费少量时间来抓取数据并更新数据库。重要的是,它不会阻止Flask运行的主线程。