Ausgelesene Daten in String ohne Komma usw.?!

Code-Stücke können hier veröffentlicht werden.
Antworten
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Hallo Leute,

noch bin ich ziemlicher Anfänger und weiß nicht ob ich daher nur was übersehen habe, vielleicht reicht ja das richtige Schlagwort. Konkret geht es darum, dass ich auf m.lotto.de die letzten aktuellen Zahlen der Ziehung auslesen und ausgeben will.

Der Code sieht so aus:

Code: Alles auswählen

def last_ziehung(ziehung):
	url = urllib2.urlopen('http://m.lotto.de/')
	for lines in url.readlines():
		if lines.startswith('        <span>'):			
			zahlen = lines[14:-8]
			ziehung.append(zahlen)
	return ziehung

ziehung = last_ziehung(ziehung=[])
ziehung = str(ziehung[:6]) #wandel zu string
print "Die letzte Ziehung: " + ziehung[1:-1]
# entfernen der [ ] Klammern

An und für sich funktioniert das ganze schon, allerdings finde ich es Mist, dass alle Zahlen mit Hochkomma ausgegeben werden, gern würde ich auch die normalen Komma entfernen. Die Frage ist jetzt nur wie das geht - gibts dafür eine Funktion, so das ich am Ende einen String bekomme, der nur die Zahlen enthält?!

Irgendwie steht ich aufm Schlauch.

Wenn die Lesefunktion an und für sich besser sein könnte, gerne her mit den Tipps!

AlphaX2
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Naja, lass halt die str()-Umwandlung weg. Am Code ist vieles, was man verbessern könnte, aber ich bin gerade schreibfaul. :mrgreen:
deets

@alphax2

Dein uebergebenes Listen-Argument, dass dann einfach "appended" wird ist un-pythonisch. Nimm stattdessen eine lokale Liste, und gib die zurueck. Wir sind hier in Python, nicht in C/C++, wo man sich mit solchen Designs die Frage nach dem "wer managed den Speicher" spart.

Ausserdem solltest du lieber auf BeautifulSoup umstellen zum scrapen von Webseiten. Denn dein Ansatz ist sehr wenig robust - wenn da mal wer die Anzahl von Spaces veraendert, bist du raus.

Stattdessen lieber mittels BeautifulSoup das p mit der Klasse "lottonumbers" suchen, und darin dann die Text-Kinder der spans rausholen & zu integern wandeln.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Du kannst das probieren:

Code: Alles auswählen

print "Die letzte Ziehung: " + " ".join(ziehung)
Aber last_ziehung :!: Das würde ich ändern. Entweder Deutsch oder Englisch. Fast noch besser als die Löcherliste.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Danke erstmal.

Vor allem für den Tipp mit BeautifulSoup, dass ich bei den ersten Änderungen raus bin is mir klar gewesen, war zunächst das erste was mir eingefallen ist.

Mit einer lokalen Liste meinst du, dass ich sie nicht als argument in die Funktion geben soll, oder?! Und wie kann ich dann die Zahlen in die Liste kriegen, was ist pythonischer?! Die Variable "zahlen" spuckt ja auch auch alle Zahlen einzeln aus, wegen der for-Schleife. Ich weiß mir da keine echte Lösung, gibts auch eine Doku zu dem BeautifulSoup - weil, das was du mir als Tipp gesagt hast versteh ich grade gar nicht^^

AlphaX2
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

hendrikS hat geschrieben:Du kannst das probieren:

Code: Alles auswählen

print "Die letzte Ziehung: " + " ".join(ziehung)
Aber last_ziehung :!: Das würde ich ändern. Entweder Deutsch oder Englisch. Fast noch besser als die Löcherliste.
Ich hatte es mal auf Deutsch hab es dann aber wegen der Qt-UI geändert und war zu faul - das sollte noch kommen. Und wegen der "Loch"-Liste - Mensch das war ein Tippfehler^^ :mrgreen:

Edit das join hat folgendes ergeben:

Code: Alles auswählen

 [ ' 8 ' ,   ' 1 0 ' ,   ' 2 2 ' ,   ' 3 0 ' ,   ' 3 6 ' ,   ' 4 5 ' ]
AlphaX2
Zuletzt geändert von AlphaX2 am Samstag 2. Juli 2011, 20:17, insgesamt 1-mal geändert.
deets

Lokale Liste meint sowas:

Code: Alles auswählen

def f():
      l = []
      for wasauchimmer in xrange(100):
           l.append(wasauchimmer)
      return l
Du gibst die also nicht rein, sondern eine in der Funktion kreierte zurueck.

Bezueglich BeautifulSoup: meine Hinweise werden klarer, wenn du dessen Doku mal liest.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

AlphaX2 hat geschrieben:Edit das join hat folgendes ergeben:

Code: Alles auswählen

 [ ' 8 ' ,   ' 1 0 ' ,   ' 2 2 ' ,   ' 3 0 ' ,   ' 3 6 ' ,   ' 4 5 ' ]
Bestimmt nicht.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

@hendrikS:

Ich hab es doch mit copy/paste rein gehauen!? :K Was sollte denn eigentlich passieren!?

AlphaX2
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

AlphaX2 hat geschrieben:Ich hab es doch mit copy/paste rein gehauen!? :K Was sollte denn eigentlich passieren!?
Es erfüllt Deine Anforderung aus dem ersten Post.
BlackJack

@hendrikS: Doch das ist das Ergebnis — zu dem Zeitpunkt ist `ziehung` doch schon an eine Zeichenkettendarstellung der Liste gebunden. ;-)
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ich habe das auch gerade noch mal probiert und war ganz irritiert. Ich hatte vorher noch die str Umwandlung entfernt. Also so:

Code: Alles auswählen

ziehung = ziehung[:6] #wandel zu string
print "Die letzte Ziehung: " + " ".join(ziehung)
Sorry.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Wow und Danke! :D

Demnächst werd ich mich wohl mal mit BeautifulSoup auseinandersetzen. ;)
Antworten