Html Liste in Python Liste

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.
Antworten
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Hi,

Ich will mit python eine html liste in eine python liste umwandeln. Leider hab ichs nicht so mit rekursion, könnt ihr mir vielleicht helfen?

Hier ist was ich haben will:

Code: Alles auswählen

        
testhtml = """
<ul>
 <li> Contents
  <ul>
   <li> Content1 </li>
    <ul>
     <li> test1 </li>
     <li> test2 </li>
    </ul>
   <li> Content2 </li>
  </ul>
 </li>
 <li> Contents2
  <ul>
   <li> Content1 </li>
   <li> Content2 </li>
  </ul>
 </li>
 <li> Random Text </li>
</ul>
"""
Und dass soll dann am Ende dabei rauskommen:

Code: Alles auswählen

["Contents", ["Content1", ["test1", "test2"], "Content2"], "Contents2", ["Content1", "Content2"], "Random Text"]
Wie kann ich das am besten mit beautifulsoup lösen?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was du suchst ist nicht Rekursion sondern ein HTML-Parser. Wie lxml und html5lib.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

ist beautifulsoup kein html parser?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

INFACT hat geschrieben:ist beautifulsoup kein html parser?
BeautifulSoup ist etwas, worüber ich inzwischen einen großen Bogen mache. Zudem es ja genug bessere Alternativen gibt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@INFACT: Doch und Du suchst wohl auch nach Rekursion egal welche der Alternativen Du am Ende verwendest.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

also html5lib auf windoofs geht nicht:

Code: Alles auswählen

doc = html5lib.parse("<script>alert('hi');</script>", treebuilder="lxml")

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    doc = html5lib.parse("<script>alert('hi');</script>", treebuilder="lxml")
  File "C:\Python26\lib\site-packages\html5lib\html5parser.py", line 37, in parse
    p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements)
  File "C:\Python26\lib\site-packages\html5lib\html5parser.py", line 68, in __init__
    self.tree = tree(namespaceHTMLElements)
  File "C:\Python26\lib\site-packages\html5lib\treebuilders\etree_lxml.py", line 176, in __init__
    builder = etree_builders.getETreeModule(etree, fullTree=fullTree)
NameError: global name 'etree' is not defined



>>> doc.nameTuple

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    doc.nameTuple
  File "C:\Python26\lib\site-packages\html5lib\treebuilders\simpletree.py", line 72, in getNameTuple
    if self.namespace == None:
AttributeError: 'Document' object has no attribute 'namespace'
Obwohl das in der Doku so angegeben ist.

lxml gibt es nicht für python2.6 und windoofs

Edit: oh, doch gerade gefunden
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

INFACT hat geschrieben:also html5lib auf windoofs geht nicht:
Wenn man lxml nicht installiert hat aber den lxml-Traabuilder auswählt ist das auch nicht verwunderlich, dann tuts nämlich auf keinen System. Aber es gibt auch den ElementTree-Treebuilder, der sollte für deine Bedürfnisse reichen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Also ich habe jetzt lxml. Wie kann ich denn verhindern, dass der in die tags rein geht.

wenn ich jetzt das html beispiel von oben haben und dann iter aufrufe, gibt der mir jedes tag, ich will aber dann nur Contents, Contents2 und Random Text
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

INFACT hat geschrieben:ist beautifulsoup kein html parser?
Völlig irrelevant da beautifulsoup Tod ist.
BlackJack

@DasIch: Interessant wo doch das letzte Release grade mal 5 Tage her ist. Oder meinst Du wirklich "Tod" statt "tot"? Warum? Es ist ein einzelnes, reines Python-Modul was man einfach mitliefern kann und das mit Jython und IronPython läuft. Alternativen *dazu*?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Leonidas hat geschrieben:
INFACT hat geschrieben:ist beautifulsoup kein html parser?
BeautifulSoup ist etwas, worüber ich inzwischen einen großen Bogen mache. Zudem es ja genug bessere Alternativen gibt.
Was stört dich denn daran?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
lunar

jbs hat geschrieben:
Leonidas hat geschrieben:
INFACT hat geschrieben:ist beautifulsoup kein html parser?
BeautifulSoup ist etwas, worüber ich inzwischen einen großen Bogen mache. Zudem es ja genug bessere Alternativen gibt.
Was stört dich denn daran?
Lies die Implementierung ... dann weißt Du schon, was daran stört.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

lunar hat geschrieben:Lies die Implementierung ... dann weißt Du schon, was daran stört.
Hallo lunar!

Ich hatte mal Probleme mit einer Website mit versauten Encodings. Diese Site lies sich nicht mit BeautifulSoup parsen. Aber ansonsten hat es mich immer zur vollsten Zufriedenheit unterstützt.

Ich möchte die Frage wiederholen: Was stört dich denn daran?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

@gerold: Ich sage nicht, dass es nicht funktioniert. Aber die Implementierung ist abenteuerlich und alles andere als schöner Quelltext. Zudem ist der Parser im Vergleich zu lxml und auch html5lib sehr langsam.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

INFACT hat geschrieben:Also ich habe jetzt lxml. Wie kann ich denn verhindern, dass der in die tags rein geht.

wenn ich jetzt das html beispiel von oben haben und dann iter aufrufe, gibt der mir jedes tag, ich will aber dann nur Contents, Contents2 und Random Text
Geht das denn, oder muss ich mir einen eigenen miniparser schreiben?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

INFACT hat geschrieben:
INFACT hat geschrieben:Also ich habe jetzt lxml. Wie kann ich denn verhindern, dass der in die tags rein geht.

wenn ich jetzt das html beispiel von oben haben und dann iter aufrufe, gibt der mir jedes tag, ich will aber dann nur Contents, Contents2 und Random Text
Geht das denn, oder muss ich mir einen eigenen miniparser schreiben?
Ich kapiere die Frage nicht! Du musst die Datenstruktur, wie Du sie haben willst, natürlich noch manuell aufbauen. lxml hilft Dir nur, alle in Frage kommenden Knoten zu finden / zu besuchen. Was Du dann mit den Daten machst, ist Deine Sache.
Antworten