我正在使用Bokeh来显示“天然气高价”的实时更新。就x轴而言,代码正在更新,但不更新Y坐标。作为示例,我附加了命令提示符打印输出,该输出显示代码正在运行,但值未更新。。该代码仅重复$ 2.968,而如果我手动刷新网站,则每三分钟会看到不同的值。
此代码与导师的工作示例完全相似,唯一的不同是我的网站。馈入网站的值不会自动更新,但网站必须刷新才能获取新值,我相信我的代码具有正确的内容,因为调用了extract_value()函数导致获取了新值。
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource, DatetimeTickFormatter
from bokeh.plotting import figure, show
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
f = figure()
def extract_value():
Highs=[]
url = "https://quotes.ino.com/exchanges/contracts.html?r=NYMEX_NG"
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
data = soup.findAll('tr')[3:]
for td in data[:100]:
High = float(td.findAll('td')[5].text)
Highs.append(High)
NGHigh = Highs[0]
return NGHigh
source = ColumnDataSource(dict(x=[datetime.now()], y=[extract_value()]))
f.circle(x='x',y='y',color='olive',line_color='red',source=source)
f.line(x='x',y='y',source=source)
def update():
new_data = dict(x = [datetime.now()] , y = [extract_value()])
source.stream(new_data, rollover = 1000)
print(source.data)
f.xaxis.formatter=DatetimeTickFormatter(hours=['%H:%M'])
curdoc().add_root(f)
curdoc().add_periodic_callback(update,30000)
当调用回调函数时,Bokeh应该是更新值,并提供不同的extract_value()值。