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
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
Leonidas
Python-Forum Veteran
Beiträge: 16025 Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:
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 (former) Modvoice
helduel
User
Beiträge: 300 Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim
Donnerstag 26. Februar 2009, 16:59
Moin,
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
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
snafu
User
Beiträge: 6731 Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen
Donnerstag 26. Februar 2009, 20:00
Wenn du eh schon BeautifulSoup nutzt, dann kannst du auch direkt nach der Klasse suchen:
Hyperion
Moderator
Beiträge: 7478 Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:
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?
snafu
User
Beiträge: 6731 Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen
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 €'
sea-live
User
Beiträge: 440 Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP
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