Beautiful Soup ist ein Weg, man konnte es gut analysieren (und es ist so, wie ich würde immer es tun, es sei denn, es einige sehr gute Gründe nicht zu tun es so, selbst). Es ist viel einfacher und lesbarer als mit SGMLParser.
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup('''<post id='100'> <title> new title </title> <text> <p> new text </p> </text> </post>''')
>>> soup('post') # soup.findAll('post') is equivalent
[<post id="100"> <title> new title </title> <text> <p> new text </p> </text> </post>]
>>> for post in soup('post'):
... print post.findChild('text')
...
<text> <p> new text </p> </text>
Sobald Sie es in diesem Stadium haben, können Sie verschiedene Dinge damit tun, je nachdem, wie Sie es wollen.
>>> post = soup.find('post')
>>> post
<post id="100"> <title> new title </title> <text> <p> new text </p> </text> </post>
>>> post_text = post.findChild('text')
>>> post_text
<text> <p> new text </p> </text>
Sie könnten HTML strippen wollen.
>>> post_text.text
u'new text'
Oder schauen Sie vielleicht auf den Inhalt ...
>>> post_text.renderContents()
' <p> new text </p> ']
>>> post_text.contents
[u' ', <p> new text </p>, u' ']
Es gibt alle Arten von Dingen, die Sie tun wollen könnte. Wenn Sie genauer sind - insbesondere, wenn Sie echte Daten bereitstellen -, hilft es.
Wenn es darum geht, den Baum zu manipulieren, können Sie das auch tun.
>>> post
<post id="100"> <title> new title </title> <text> <p> new text </p> </text> </post>
>>> post.title # Just as good as post.findChild('title')
<title> new title </title>
>>> post.title.extract() # Throws it out of the tree and returns it but we have no need for it
<title> new title </title>
>>> post # title is gone!
<post id="100"> <text> <p> new text </p> </text> </post>
>>> post.findChild('text').replaceWithChildren() # Thrown away the <text> wrapping
>>> post
<post id="100"> <p> new text </p> </post>
Und so, schließlich, würden Sie so etwas wie dieses:
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup('''
... <post id='100'> <title> new title 100 </title> <text> <p> new text 100 </p> </text> </post>
... <post id='101'> <title> new title 101 </title> <text> <p> new text 101 </p> </text> </post>
... <post id='102'> <title> new title 102 </title> <text> <p> new text 102 </p> </text> </post>
... ''')
>>> for post in soup('post'):
... post.title.extract()
... post.findChild('text').replaceWithChildren()
...
<title> new title 100 </title>
<title> new title 101 </title>
<title> new title 102 </title>
>>> soup
<post id="100"> <p> new text 100 </p> </post>
<post id="101"> <p> new text 101 </p> </post>
<post id="102"> <p> new text 102 </p> </post>
was Sie tun möchten? HTML-Datei analysieren? – virhilo
Ich habe eine große Textdatei mit SGML, wo ich Tags von Format habe neue Titel . Ich möchte, dass mein Code in der Lage ist, mir dieses Ergebnis in einer anderen Datei zu geben: neuer Text –
afg102
neuer Text