听起来您想构建一个动态 SPA(单页应用程序)。
您需要应用服务器托管后端,该后端将处理路由和提供动态内容(水流量)。
然后您需要一些前端代码来呈现漂亮的 UI 并显示后端提供的内容。
听起来你想使用 python(根据问题标签)。
实现此目的的一种快速方法是创建一个 python Flask 应用程序。 Flask 将允许您构建应用服务器。此外,Flask 有一个“模板引擎”Jinja2,它允许您通过组合 HTML 和 python 对象来创建 UI。
例如:
创建一个名为 waterproject 和 waterproject/templates/ 的文件夹
然后创建2个文件,waterproject/app.py和waterproject/templates/index.html
# waterproject/app.py
from flask import Flask, render_template
import json
app = Flask(__name__)
def read_water_level():
with open('/file/where/data/is/stored.txt') as file:
water_level = file.read()
return water_level
@app.route('/index', methods=['GET'])
def index():
render_template('index.html', water_level=read_water_level())
@pp.route('/waterlevel', methods=['GET'])
def get_water_level():
return json.dumpss({'waterlevel': read_water_level()})
if __name__ == "__main__":
app.run(host='localhost',debug=True)
我们在上面创建了 2 条路线。一个服务于主页,另一个是只返回水位的 api 端点。这个端点将用于允许前端自动轮询后端的水位,而无需重新渲染(或刷新)整个页面。
还假设您的网络爬虫将水位保存在文件中的“/file/where/data/is/stored.txt”
然后您将创建上述路由呈现的 .html 文件 (index.html)。
# in /waterproject/templates/index.html
<!DOCTYPE html>
<html>
<head>
<script src="jquery-3.4.1.min.js"></script>
<title>Water Level of River</title>
<style>
body {
text-align: center;
}
#water {
color: blue;
}
</style>
<script>
var get_water_level = function() {
$.get( "/waterlevel", function( data ) {
$( "#water" ).html( data['waterlevel'] );
});
};
var interval = 1000 * 60 * X; // where X is your every X minutes
setInterval(get_water_level, interval);
</script>
</head>
<body>
<div id="water">
{{water_level}}
</div>
</body>
</html>
注意这个 html 文件是如何将 {{water_level}} 对象嵌入到 html 中的。这不是正确的 html,但是 Flask 使用的模板引擎允许我们有效地将 water_level 对象从应用服务器的 python 代码传递到 html 文档中。
此外,.html 页面中有一些 javascript,用于每 X 分钟获取一次水位,并更新页面。因此,如果用户访问您的页面并在其上停留 10 分钟,则该页面将每分钟自动刷新一次。
要部署应用程序,请查看 Flask 的文档,那里有一些不错的选项和说明,包括 Heroku 的说明。
https://flask.palletsprojects.com/en/1.0.x/deploying/
*注意我实际上并没有运行这段代码,但它应该给你一个很好的起点。
将 css、javascript 和 html 组织在不同的文件中也是一种很好的做法,但是对于这么小的应用程序,为了简单起见,所有内容都显示在一个文件中。