我正在使用Python和Flask构建一个简单的网站。当我在终端中运行以下命令时,我注意到了:
sudo python app.py
它可以设置所有内容,并通过本地端口在Web浏览器中访问我的网站。我的问题是我的Flask app.py
文件进行了一些网页抓取,并在访问时在网站上显示结果。
可悲的是,每次有人访问我的网站时,这些网页数据都不会更新。相反,当我输入sudo python app.py
时,网页抓取代码似乎只运行一次,因此当访问网址时的结果是静态的。每当有人访问该网站以获取最新的实时抓取数据时,我希望app.py
运行。这是可能的,我将如何使用flask和python进行操作?
我的app.py
包含:
from flask import Flask, flash, redirect, render_template, request, session, abort
from sklearn.externals import joblib
import praw
import datetime
from operator import attrgetter
import sys
import numpy as np
class Post:
def __init__(self, subreddit):
self.subreddit = subreddit
class HotPost:
def __init__(self, subreddit, ):
self.subreddit = subreddit
reddit = praw.Reddit(client_id='myClientId',
client_secret='myClientSecret',
user_agent='pythonscript:com.example.hotandrisingcheckerandbarker:v0.1 (by /u/myusername)',
username='myusername',
password='mypassword')
subredditsToScan = ["Art", "videos", "worldnews"]
svm = joblib.load('modelSvm.pkl')
trendingPosts = []
for subreddit in subredditsToScan:
for submission in reddit.subreddit(subreddit).hot(limit=150):
trendingPosts.append(Post(subreddit))
app = Flask(__name__)
@app.route("/")
def index():
#return "Flask App!"
return render_template(
'list.html',name=len(trendingPosts))
@app.route("/hello/<string:name>/")
def hello(name):
return render_template(
'list.html',trendingPosts=trendingPosts)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
答案 0 :(得分:1)
加载页面时,运行代码的唯一部分是附加到相关路径的函数中的任何部分。构建trendingPosts
的部分仅在启动服务器时运行一次。
如果您将for
循环移到index()
内,您应该得到您正在寻找的行为:
@app.route("/")
def index():
for subreddit in subredditsToScan:
for submission in reddit.subreddit(subreddit).hot(limit=150):
trendingPosts.append(Post(subreddit))
return render_template(
'list.html',name=len(trendingPosts))