Как заставить Bokeh обновлять последние значения с сайта Scraped - PullRequest
0 голосов
/ 02 января 2019

Я использую Bokeh, чтобы показывать в режиме реального времени обновления по цене природного газа.Код обновляется относительно оси x, но не обновляет координаты Y.В качестве примера я приложил распечатку командной строки, которая показывает, что код работает, но значения не обновляются. enter image description here.Код только повторяет $ 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 ().

...