【发布时间】:2020-04-26 00:06:34
【问题描述】:
我正在运行一个显示当前白银价格的简单网站。如何让它在无限循环中运行,以便在任何时间间隔(例如 10 秒)后从 silverseek.com 抓取价格后不断更新价格?我尝试使用 BackgroundScheduler,但是,它会引发错误
跳过作业“silver(触发器:interval[0:00:10],下次运行时间:2020-01-08 17:56:27 IST)”的执行:最大运行实例数 达到 (1) 作业“silver(触发器:interval[0:00:10],下次运行时间:2020-01-08 17:56:37 IST)”引发异常 回溯(最近一次通话最后): 文件“C:\Users\Abhi\PycharmProjects\Cricket\venv\lib\site-packages\apscheduler\executors\base.py”, 第 125 行,在 run_job 中 retval = job.func(*job.args, **job.kwargs) 文件“C:/Users/Abhi/PycharmProjects/Cricket/internet.py”,第 25 行,银色 return render_template('home.html', s=txt.get_text()) 文件“C:\Users\Abhi\PycharmProjects\Cricket\venv\lib\site-packages\flask\templating.py”, 第 136 行,在 render_template 中 ctx.app.update_template_context(上下文) AttributeError: 'NoneType' 对象没有属性 'app'
这里是代码。
from bs4 import BeautifulSoup
from selenium import webdriver
import time
from apscheduler.schedulers.background import BackgroundScheduler
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def silver():
url = "http://silverseek.com/"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(executable_path='C:/Users/Rags/Downloads/cd79/chromedriver.exe', options=chrome_options)
driver.get(url)
time.sleep(8)
sil = driver.page_source
bs = BeautifulSoup(sil, "lxml")
elem = bs.find_all('div', class_='quote-container')
for txt in elem:
return render_template('home.html', s=txt.get_text())
sched = BackgroundScheduler(daemon=True)
sched.add_job(silver, 'interval', seconds=10)
sched.start()
if __name__ == "__main__":
app.run()
【问题讨论】:
-
能否请您添加完整的回溯?
-
@Shiva 完成。请检查。
-
好吧,实际上你几乎不会“更错”——但至少你会学到一些东西 xD
-
@RakeshGulati,不客气——每个人都必须从某个地方开始,走错路总比什么都不做要好。至少你自己先尝试过 ;-)
-
顺便说一句,您可能在这里学到的第一件事是尽可能清楚地解释您真正试图解决的问题(而不是只提及您的想法是解决方案),特别是当你刚开始并且不一定有适当的词汇时。 FWIW 这被称为“XY 问题”(用户只询问 X,但他们真正的问题是 Y,而 X 不是 Y 的解决方案)。