Приведенный ниже код извлекает данные с двух разных веб-сайтов, и Боке выводит их на график. Проблема заключается в том, что когда я отображаю данные «Объемы» в сравнении с datatime.now () по оси x, они отображаются, но когда я отображаю данные «Открыть» или «Длится», мой график Bokeh остается пустым. Я подумал, что в скопированных данных содержится символ мусора, но если это так, то тома также не должны отображаться. Эта проблема возникает также с «ugaz» и «dgaz», когда выходные данные экспортируются в tags1.text и tags2.text. Я уже давно пытаюсь понять.
Тем не менее, когда я печатаю (source.data), вывод приходит как
{'x': [datetime.datetime (2020) , 1, 5, 21, 15, 38, 712611)], 'y': ['1094'], 'y1': ['2.095']}
Код:
import requests
from bs4 import BeautifulSoup
from bokeh.models import Range1d, LinearAxis
import time
from datetime import datetime
from bokeh.models import ColumnDataSource, DatetimeTickFormatter
from bokeh.plotting import figure, show
from math import radians
import pandas as pd
p = figure()
Volumes = []
Opens = []
Lasts=[]
Contracts =[]
Lows = []
Highs = []
res3 = requests.get('https://shared.websol.barchart.com/quotes/quote.php?
page=quote&sym=ng&x=13&y=8&domain=if&display_ice=1&enabled_ice_exchanges=&tz=0&ed=0')
res1 = requests.get('https://finance.yahoo.com/quote/ugaz?ltr=1')
res2 = requests.get('https://finance.yahoo.com/quote/dgaz?ltr=1')
soup1 = BeautifulSoup(res1.text,'html.parser')
soup2 = BeautifulSoup(res2.text,'html.parser')
tags1 = soup1.find_all('span')[11]
tags2 = soup2.find_all('span')[11]
soup3 = BeautifulSoup(res3.text, 'lxml')
soup3.prettify()
data_rows = soup3.findAll('tr')[2:]
i = range(len(data_rows))
for td in data_rows:
Volume = td.findAll('td')[6].text
Volumes.append(Volume)
Open = td.findAll('td')[3].text
Opens.append(Open)
Last = td.findAll('td')[1].text
Lasts.append(Last)
Contract = td.findAll('td')[0].text
Contracts.append(Contract)
Low = td.findAll('td')[5].text
Lows.append(Low)
High = td.findAll('td')[4].text
Highs.append(High)
source = ColumnDataSource(dict(x=[datetime.now()],y=[Volumes[2]], y1=[Opens[2]]))
p.circle(x ='x', y ='y',source=source,color='blue')
p.circle(x ='x', y ='y1',source=source,color='red')
show(p)