ich benutze folgenden Code um per Regex <description> auszulesen:
Code: Alles auswählen
string = re.search("<description>(.*)</description>",html)
print string.groups(1)
Code: Alles auswählen
string = re.search("<description>(.*)</description>",html)
print string.groups(1)
Nicht gut wegen Gier. Besser:Sico hat geschrieben:Code: Alles auswählen
string = re.search("<description>(.*)</description>",html)
Code: Alles auswählen
string = re.search("<description>([^>]*)<\/description>", html)
Code: Alles auswählen
html = html.split("\n")
for i in html:
i = i.rstrip("\n")
matchobj = re.search("<description>([^>]*)<\/description>", i)
if matchobj:
print matchobj.groups()
Code: Alles auswählen
html = """
<html>
<body>
<description>foo</description>
<description>
bar
</description>
<description><b>baz</b></description>
</body>
</html>
"""
import re
for i in html.split("\n"):
i = i.rstrip("\n")
matchobj = re.search("<description>([^>]*)<\/description>", i)
if matchobj:
print matchobj.groups()
from xml.etree.ElementTree import fromstring
doc = fromstring(html)
for d in doc.findall(".//description"):
print d.text
Code: Alles auswählen
def sax_parse(s):
def unquote(t): return t.replace("<", "<").replace("&", "&")
for m in re.finditer(r"</\s*(.+?)\s*>|<\s*(.+?)\s*/>|<\s*(.+?)\s*>|([^<]+|<)", s.strip()):
end, empty, start, text = m.groups()
if start:
yield sax_parse.START, start
elif end:
yield sax_parse.END, end
elif empty:
yield sax_parse.START, empty
yield sax_parse.END, empty
else:
yield sax_parse.TEXT, unquote(text)
Code: Alles auswählen
html = """
< html >
<body>
<description>foo</description>
<description>
bar
baz
</description>
<description><b>baz</b></description>
</body>
</html>"""
for e, t in sax_parse(html):
print e, `t`
Code: Alles auswählen
class Elem:
def __init__(self, name):
self.name, self.children, self.text, self.tail = name, [], "", ""
def __str__(self):
return "<%s>%s%s</%s>%s" % (self.name, self.text, "".join(str(c) for c in self.children), self.name, self.tail)
Code: Alles auswählen
def elem_parse(s):
stack = []
for t, e in sax_parse(s):
if t == sax_parse.START:
stack.append(Elem(e))
if t == sax_parse.END:
if stack and stack[-1].name == e:
elem = stack.pop()
if stack: stack[-1].children.append(elem)
else: return elem
else: raise ValueError("wrong </%s>" % e)
if t == sax_parse.TEXT:
if stack:
if stack[-1].children: stack[-1].children[-1].tail += e
else: stack[-1].text += e
else: raise ValueError("no root")
raise ValueError("stuff after end")
Code: Alles auswählen
def find_all(self, name):
if name == self.name:
yield self
else:
for c in self.children:
for e in c.find_all(name):
yield e
Code: Alles auswählen
for e in elem_parse(html).find_all("description"):
print e
Also ersteres ist ja wohl ganz klar ein Problem des Forums und nicht meines Beitrags Ich würde mir auch eine mobile Form wünschen, wo ich - sei es per App oder angepasster Website - bequem vom Handy aus lesen und antworten kann. Dann würden meine Postings auch nicht so lang werden. Außer, ich könnte sie Siri diktieren.deets hat geschrieben:Ja zumindest wenn ich sowas auf meinem iPhone lese - da ist die Schrift sonst zu
Klein und ich behaupte, unser problembär nimmt das als beispiel , wie man ohne "modulgefrickel" weiter kommt...
Kreuzzug ist, wenn man eine bestimmte Auffassung verlangt und alle anderen bekämpft, weil man glaubt, schon im Besitz der letzten Wahrheit zu sein.deets hat geschrieben:@problembaer
Ein schoenes Beispiel, warum regulaere ausdruecke zur Verarbeitung von HTML ungeeignet sind, und dein Kreuzzug gegen richtige Ratschlaege bestenfalls Verwirrung, wenn nich gar Schaden anrichtet.
Eigentlich schön formuliert - nur dass es hier keine "Obrigkeit" gibt; ich bin ihr zumindest noch nicht begegnet Ansonsten stimmen Dir hier sicherlich die meisten zu, dass man coden darf, was man will und wie man will, aber...problembär hat geschrieben: Ich dagegen trete für Code-Toleranz ein und für die Freiheit, das zu schreiben, was man möchte, egal ob es der Obrigkeit genehm ist oder nicht.
... es gibt eben gute und schlechte Hilfe. Wenn jemand über eine x spurige Straße gehen will und das Konzept des Druckknopfs für die Fußgängerampel nicht kennt, dann erkläre ich ihm dieses und sage nicht "Ich sag Bescheid, wenn links frei ist!"problembär hat geschrieben: Wenn also jemand HTML mit RegEx parsen möchte, sag' ich, "laß' ihn doch" und helfe ihm so gut ich kann dabei, daß es technisch auch klappt.
Wie ich ja schnell gezeigt habe, ist es mit dem "technischen klappen" deiner Hilfe nicht so weit her. Du hast also dem OP eine Baerendienst erwiesen (wie nicht anders zu erwarten...).problembär hat geschrieben: Kreuzzug ist, wenn man eine bestimmte Auffassung verlangt und alle anderen bekämpft, weil man glaubt, schon im Besitz der letzten Wahrheit zu sein.
Ich dagegen trete für Code-Toleranz ein und für die Freiheit, das zu schreiben, was man möchte, egal ob es der Obrigkeit genehm ist oder nicht. Das ist das Gegenteil von Kreuzzug. Du verwechselst die Seiten, auf denen wir stehen.
Wenn also jemand HTML mit RegEx parsen möchte, sag' ich, "laß' ihn doch" und helfe ihm so gut ich kann dabei, daß es technisch auch klappt.
Hm... Du setzt dabei voraus, dass der OP aus Fehlern lernt; meine Erfahrungen als Nachhilfelehrer haben mir immer gezeigt, dass das bei den meisten dort nicht der Fall war, sondern man diese Leute direkt auf den "richtigen" Weg leiten musste. Sobald sie diesen einmal verstanden hatten, war das Problem damit gegessen. Ok, man kann natürlich einwerfen, dass Schüler / Studenten, die Nachhilfe benötigen, ggf. nicht repräsentativ sindsma hat geschrieben:Oder um Bild zu bleiben, führe den Fragesteller ruhig auf den Mittelstreifen, warte bis er dort nicht mehr weiterkommt, und dann hilf ihm zurück und über die Brücke anstatt sofort zu sagen, "man geht da nicht rüber, aber in 3km Entfernung ist eine Brücke".