modul re float aus text grappen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

modul re float aus text grappen

Beitragvon sea-live » Donnerstag 26. Februar 2009, 14:18

servus ich versuch mal mir aus dem internet einen preis der täglich aktuallisiert wird zu grabben
ich hätte gerne akt als float == 48,75
und bekomm das nicht hin
bitte um hilfe

Code: Alles auswählen

# -*- coding: cp1252 -*-
import re
text="""<tr>
<td class="odd menge"><input class="text menge" maxlength="6" type="text" name="his_tab_conf[m1]" value="2000" /></td>
<td class="odd es"><input class="text es" maxlength="2" type="text" name="his_tab_conf[es1]" value="1" /></td>
<td class="odd preis_his">47,71 €</td>
<td class="odd preis_akt">48,75 €</td>
<td class="odd diff up">+1,04 €</td>
<td class="odd bestellen">
<a href="http://www.esyoil.com/heizoel_rechner.php?s13_plz=76676&es_abfr=1&menge_abfr=2000&test=ok&tk_herkunft=opti" title="Direkt-Bestellung" rel="nofollow">
<img src="/images-Dateien/einkaufswagen.png" alt="Direkt-Bestellung" />
</a>
</td>
</tr>"""
preis = re.findall(">(\d{2})", text)
print preis
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 26. Februar 2009, 14:51

Nimm doch lxml.html statt der regulären Ausdrücke. Ist eh sinnvoller wenn man HTML scraped.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Beitragvon helduel » Donnerstag 26. Februar 2009, 16:59

Moin,

Code: Alles auswählen

preis = re.findall('preis_akt">(\d+,\d{2})', text)


Das \d+ sorgt dafür, dass der Preis auch ein- oder mehr als zweistellig sein darf.

Gruß,
Manuel
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Donnerstag 26. Februar 2009, 19:16

danke
nun flutscht das

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: cp1252 -*-

import re
import urllib2
from BeautifulSoup import BeautifulSoup

try:
    url = urllib2.urlopen("http://www.esyoil.com/heiz%C3%B6lpreise/heiz%C3%B6l_Graben-Neudorf_e3.php")
    soup = BeautifulSoup(url.read(),
                         convertEntities=BeautifulSoup.HTML_ENTITIES)

    eingelesen =  soup.find(text=re.compile("Menge")).findNext("tr")
    preis = re.findall('preis_akt">(\d+,\d{2})', str(eingelesen))

except urllib2.URLError:
    preis = "Unknown"

print "Aktueller Heizoelpreis fuer 100 liter" , preis
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Donnerstag 26. Februar 2009, 20:00

Wenn du eh schon BeautifulSoup nutzt, dann kannst du auch direkt nach der Klasse suchen:

Code: Alles auswählen

soup.find('td', {'class' : 'odd preis_akt'}).string
shcol (Repo | Doc | PyPi)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Donnerstag 26. Februar 2009, 20:01

snafu hat geschrieben:Wenn du eh schon BeautifulSoup nutzt, dann kannst du auch direkt nach der Klasse suchen:

Wo bleibt denn da der "Spaß" mit den RegExps? :twisted:
Benutzeravatar
snafu
User
Beiträge: 5389
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beitragvon snafu » Donnerstag 26. Februar 2009, 20:09

Die muss man dann wohl nutzen, wenn man der Ausgabe den letzten Schliff verpassen will:

Code: Alles auswählen

In [76]: soup.find('td', {'class' : 'odd preis_akt'}).string
Out[76]: u'49,10 €'
shcol (Repo | Doc | PyPi)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Donnerstag 26. Februar 2009, 20:38

Und zwar so:

Code: Alles auswählen

In [1]: preis_akt = u'49,10 €'

In [2]: import re

In [3]: m = re.search(r'\d+?,\d+', preis_akt)

In [4]: m.group()
Out[4]: u'49,10'
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Donnerstag 26. Februar 2009, 22:01

DANKE snafu das beispiel mit den klassen wird für manche sicherlich hilfreich sein da die meisten php auf diese weise aufgebaut sind

SUPI Leut's

Wer ist online?

Mitglieder in diesem Forum: /me