Webseite auslesen - schlankste Lösung?

16/09/2007 - 15:17 von Jan Weiher | Report spam
Hallo,
ich versuche gerade, eine Webseite mittels Python auszulesen.
Im konkreten Fall handelt es sich um eine Liste mit Terminen auf einer
Webseite, die ich dann gerne einfach in nem Tuple hàtte, um sie weiter
zu verarbeiten.
Soweit eigentlich ja nicht schwierig.
Bei meinem Versuch, das mit mechanize und re zu realisieren scheitere
ich jedoch immer daran, dass das Script sich dann quasi "aufhàngt" und
sich nurnoch abschießen làsst - Fehlermeldung gibt es keine?
Weiß jedoch jetzt auch nicht so genau was ich so alles falsch mache
(bestimmt ne Menge - bin nàmlich Python Anfànger)
Also hier ist mal der Schnipsel ich hoffe jemand kann mir hier zeigen,
wie es richtig geht ;)

#!/usr/bin/python
## -*- coding: utf-8 -*-
from mechanize import Browser
import re

br=Browser()
mypage = br.open("http://blabla")
myresponse = mypage.read()
myresponse = myresponse.replace("","")
myresponse = myresponse.replace("\t","")
myresponse = re.sub("(<([a-zA-Z\/]+)(.*?)>|\(.*?\))","",myresponse)
myresponse = myresponse.decode('iso-8859-1').encode('utf-8')
myresponses = re.split("([A-Z]{1}[a-z]{1}\.)",myresponse)

for x in range(len(myresponses)):
mystring re.findall("([0-3]{1}[0-9]{1})\.([0-1]{1}[0-9]{1})\.(200[7-9])(([^a-z\/\[\]]{2,})+)ab(.*?)([0-2]{1}[0-9]{1})(\.)?([0-5]{1}[0-9]{1})?(.*?)Uhr(.*?)((im|in
der){1})(.*?)\/(.*?)\.",myresponses[x])
print mystring # nur zum testen


also ich schàtze mal das Problem liegt in dem regulàren ausdruck ;)

trotzdem schonmal danke, falls mir jemand helfen kann!

Jan
 

Lesen sie die antworten

#1 Stefan Behnel
16/09/2007 - 15:45 | Warnen spam
Jan Weiher schrieb:
ich versuche gerade, eine Webseite mittels Python auszulesen.
Im konkreten Fall handelt es sich um eine Liste mit Terminen auf einer
Webseite, die ich dann gerne einfach in nem Tuple hàtte, um sie weiter
zu verarbeiten.



Versuch's doch mit lxml.

http://codespeak.net/lxml/

Sowas zum Beispiel:

from lxml import etree
parser = etree.HTMLParser()
tree = etree.parse("http://blabla", parser)

for feld in tree.xpath('//table[@class="..."]//tr/td[0]'): # oder sowas
print feld.text

oder mit Listen:

for eintrag in tree.xpath('//ul[li[contains(., "Termine")]]/li'):
print eintrag.text

Wie du die entsprechenden Tabellen und Felder (oder Listen und Zeilen)
auswàhlst, musst du natürlich der HTML-Seite selbst entnehmen, aber das oben
sollte dich auf den richtigen Weg bringen.

Stefan

Ähnliche fragen