Zapisywanie kursów walut poprzez lxml

Zapisywanie kursów walut poprzez lxml
PI
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Witam serdecznie

Potrzebuję wydobyć aktualne kursy walut do mojego przelicznika walut (również stworzonego w Pythonie). Kod który napisałem działa, ale dodatkowo dorzuca znaki, z którymi w prosty sposób nie mogę dokonać konwersji.

Kopiuj
import requests
import lxml.html

html = requests.get("https://kursy-walut.mybank.pl/")
doc = lxml.html.fromstring(html.content)
USDkurs = doc.xpath('//*[@id="USDPLN_NBP"]/text()')
EURkurs = doc.xpath('//*[@id="EURPLN_NBP"]/text()')
CHFkurs = doc.xpath('//*[@id="CHFPLN_NBP"]/text()')
GBPkurs = doc.xpath('//*[@id="GBPPLN_NBP"]/text()')

Oto wynik po wywołaniu printa
screenshot-20190520004918.png

Czy wiecie może jak się tych nawiasów i apostrofów pozbyć?

Pozdrawiam
Piotr

WO
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Postów:25
1

Może spróbuj w taki sposób:

Kopiuj
USDkurs = float(doc.xpath('//*[@id="USDPLN_NBP"]/text()')[0].replace(',', '.')) 

PI
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Super! Działa znakomicie. Mam jeszcze jedno pytanie - wszystko działa prawidłowo w momencie wrzucenia tego małego skryptu do mojego programu w definicję, gdzie odbywa się przeliczanie. Natomiast nie chciałbym robić bałaganu w programie i umieścić ten skrypt w osobnej definicji. Wtedy pojawia się problem, że program nie widzi mojej zmiennej. Jak się odwołać do zmiennej w innej definicji?

screenshot-20190520203713.png

WO
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Postów:25
0

Z tego co widać to uzywasz tych funkcji jako metody klasy.(maja paramter self) W takim przypadku możesz w metodzie init stworzyć sobie zmienne self.USDkurs itp i będą one widoczne we wszystkich metodach klasy i wtedy tam gdzie masz USDkurs to bedziesz mial self.USDkurs itp

PI
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Po dodaniu zmiennych program się wysypuje już na self.USDkurs - czy coś źle dopisałem?

Kopiuj
class Kalkulator(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)

        self.interfejs()
        self.USDkurs
        self.EURkurs
        self.CHFkurs
        self.GBPkurs

WO
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Postów:25
1

Tak, przypisz jakieś wartości domyślne zmiennym np self.USDkurs = 0

edytowany 1x, ostatnio: wojtyk
PI
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Ok, błąd nie wyskakuje, w def Pobieranie_kursow zmieniłem zmienne USDkurs na self.USDkurs, w def przeliczanie również zmieniłem zmienne na self.USDkurs
Wyskakuje jednak komunikat że nie można dzielić przez zero czyli tak jakby nie działa wczytywanie kursów i zostaje przypisana domyślna wartość :/

WO
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
  • Postów:25
1

W takim razie upewnij się ze pobieranie kursów jest wykonywane wcześniej przed funkcją przeliczanie

PI
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

No tak :D Przecież to, że dopisałem definicję Pobieranie_kursow przed definicją przeliczanie nie oznaczało, że program wcześniej ją uruchomi ;) W trakcie rozwiązywania tego problemu pojawił się kolejny, a mianowicie musiałem zmienić sposób parsowania danych. I znów mam problem z wyodrębnieniem tylko samej kwoty. Próbowałem funkcji findAll lub find_All jednakże pojawia się puste pole. Natomiast bez wyodrębniania wczytany xml wygląda tak:

screenshot-20190520233034.png

Kod również króciutki:

Kopiuj
from bs4 import BeautifulSoup
import urllib.request

url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/chf/')
url.encoding = 'UTF-8'
xml = BeautifulSoup(url, 'lxml')

print(xml)
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:1027
0

Żeby tamten problem prawidłowo rozwiązać, musisz dodać na początku linijki self.:

Kopiuj
self.USDkurs = float(doc.xpath('//*[@id="USDPLN_NBP"]/text()')[0].replace(',', '.')) 

Inaczej, zmienna będzie zmienną lokalną funkcji i po wyjściu z niej wyjdzie z zakresu (stracisz do niej dostęp).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.