Merhaba,
bu linkteki >> https://borsa.doviz.com/hisseler/SASA
bu grafikteki >>
yer alan verileri python ile çekip, sqlite’a kaydetmek istiyorum. Uğraş uğraş beceremedim. Yardımcı olabilecek birileri varsa sevinirim.
Merhaba,
bu linkteki >> https://borsa.doviz.com/hisseler/SASA
bu grafikteki >>
yer alan verileri python ile çekip, sqlite’a kaydetmek istiyorum. Uğraş uğraş beceremedim. Yardımcı olabilecek birileri varsa sevinirim.
Anladığım kadarı ile grafik path
tagı kullanılarak çiziliyor. d
niteliği ile tablodaki sayısal değerler hesaplanabilir herhalde.
Javascript kodları ve sunucudan çekilen veriler de incelenebilir.
yani tam olarak nasıl bir yol izlememi tavsiye ediyorsun?
Site highcharts kullanıyor, sitede 1 tane grafik var, dolayısıyla şuradan hareketle
from selenium import webdriver
website = "https://borsa.doviz.com/hisseler/SASA"
driver = webdriver.Chrome(r"path\to\chromedriver.exe")
driver.get(website)
script = "return window.Highcharts.charts[0].series[0].options.data"
data = driver.execute_script(script)
ys = [point["y"] for point in data]
ys’ı plot ederseniz:
sqlite kısmını ve selenium’suz nasıl olur’u bilmem (ama tarayıcı açmadan’la ilgili bir konu vardı heralde geçenlerde)
ben bunu çalıştırdım ama yani ne oldu tam anlayamadım siz bu görseli programı çalıştırarak mı elde ettiniz?
Üstteki kodun akabinde şu alttakiyle o grafik çıkar:
import matplotlib.pyplot as plt
plt.style.use("fivethirtyeight")
plt.plot(ys, lw=1)
ys değişkeninde grafikteki veriler saklı ama salt y ekseni değerleri, zaman mefhumu yok. data
'yı incelerseniz göreceksinizdir.
(Aslında data
'nın içindeki dict’lerin x attribute’ünde unix_time_stamp + 000
gibi bir pattern var, oradan verilere karşılık gelen zamana da ulaşabilirsiniz e.g. ilk veri için i.e. data[0]["x"] == 1595487656000
var, son 3 sıfırı atıp date converter’dan geçirirseniz 07/23/2020 @ 7:00am (UTC)
veriyor. Atıyorum ama 3 sıfır UTC + 3’e tekabül ediyor sanki, gerçekten de sitedeki ilk verinin tarihi 23 Temmuz sabah 10.)
her şey için teşekkür ederim ama ben çalıştırdığım zaman problem çıkıyor. Gerçekleşen tek şey chrome’un açılıp siteye gitmesi. Onun dışında olan bir şey yok hatta hata da vermiyor.
İlk verilen kod ekrana bir şey yazmıyor zaten.
print(data)
yazdınız mı mesela sonlara bir yere, veya interaktif çalıştırıyorsanız data
'yı incelediniz mi?
öncelikle daha önce matplotlib kullanmadığım için nasıl işliyor fikrim yok. print(data)
yazdığım da şu ekranı aldım;
Bu yazdırdığınız data
, sözlüklerden oluşan bir liste,
her sözlük de iki anahtar-değer ikilisinden oluşuyor: "x": ...
ve "y": ...
"y"
'lerin karşısındakiler grafikteki değerler (yani hisse senedi heralde)
"x"
'lerin karşısındakiler de yukarıda bahsetmeye çalıştığım unix time stamp’lerle ilgili, grafiğin x eksenini, yani verilerin ait oldukları zamanı gösteren değerler.
İlk kodun yaptığı da işte bu yapıdan bi’ list comprehension’la y
değerlerini (hisse senetleri?) çekip ys
değişkenine atamak. Bu değişkenle yapmak istediğiniz şey sizin tasarrufunuzda e.g. sqlite’a kaydetmek. Ben de matplotlib’le grafiğini çizip sitedekiyle uyuşuyor mu diye baktım.
şimdi anladım çok teşekkür ederim. sözlükteki değerleri kullanarak kayıt ederim sqlite a. şöyle bir şey daha sorayım.
şimdi matplotlib ile sizin çizdirdiğiniz gibi grafik de çizdirmek istiyorum. şimdi matplotlib bilmediğim için bunu nasıl yapacağıma dair fikrim yok. o konuda bir yardımınız olur mu?
Matplotlib kullanmayacaksanız tkinter.Canvas
ile gerekli çizimleri yapabilirsiniz.
Hızlı bir çizim yapmak, matplotlib’de import dahil 3 satıra denk geliyor:
import matplotlib.pyplot as plt
plt.plot(ys)
plt.show()
Hafif bi stil kazandırmak için, nispeten daha güzel gözüksün diye fivethirthyeight
stilini kullandım, bir de çizdirirken grafiğin kalınlığını ayarlamak için (yani linewidth
veya kısa olarak lw
) bir keyword argüman yazdım, o kadar.
Bunlar ve çook daha fazlası için:
https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py
https://jakevdp.github.io/PythonDataScienceHandbook/04.00-introduction-to-matplotlib.html
TEKRAR teşekkür ederim. Şimdi bilgisayara geçtim de kod sıkıntı veriyor. Dünkü aynı kodu çalıştırıyorum fakat şu hatayı veriyor;
Traceback (most recent call last):
File “C:\Users\USER\Desktop\try.py”, line 11, in
data = driver.execute_script(script)
File “C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 636, in execute_script
‘args’: converted_args})[‘value’]
File “C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 321, in execute
self.error_handler.check_response(response)
File “C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py”, line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot read property ‘series’ of undefined
(Session info: chrome=84.0.4147.89)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7601 SP1 x86_64)
Hatanın kaynağı sitede grafik yüklenemeden script’in execute ediliyor olması olabilir, script’i execute etmeden bi’ sleep
atarsanız 3-5 saniyelik, belki çözülür.
evet bu şekilde yapınca düzeldi. aceleci davranıp düşünmeden hareket ediyorum kusura bakmayın.