Beautiful Soup是一種方法,你可以很好地分析它(這就是我想要的方式總是這樣做,除非有一些非常好的理由不這樣做就這樣,我自己)。它比使用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>
一旦你在這個階段得到了它,你可以用它做各種事情,具體取決於你的需要。
>>> 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>
你可能想剝離HTML。
>>> post_text.text
u'new text'
也許看內容...
>>> post_text.renderContents()
' <p> new text </p> ']
>>> post_text.contents
[u' ', <p> new text </p>, u' ']
有你能想到做各種各樣的事情。如果你更具體 - 尤其是提供真實數據 - 它會有所幫助。
當談到操縱樹時,你也可以這樣做。
>>> 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>
所以,最後,你有這樣的事情:
>>> 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>
你想做什麼?解析html文件? – virhilo 2011-01-08 09:09:02
我有一個帶SGML的大文本文件,其中包含格式標籤新標題 。我希望我的代碼能夠在另一個文件中將此結果給我: 新文本 –
afg102
2011-01-08 09:14:13
新文本