获取HTML代码的结构

时间:2014-07-08 20:14:04

标签: python html beautifulsoup

我正在使用BeautifulSoup4,我很好奇是否有一个函数返回HTML代码的结构(有序标签)。

以下是一个例子:

<html>
<body>
<h1>Simple example</h1>
<p>This is a simple example of html page</p>
</body>
</html>

print page.structure()

>>
<html>
<body>
<h1></h1>
<p></p>
</body>
</html>

我试图找到一个解决方案,但没有成功。

由于

2 个答案:

答案 0 :(得分:5)

据我所知,没有一点递归应该有效:

def taggify(soup):
     for tag in soup:
         if isinstance(tag, bs4.Tag):
             yield '<{}>{}</{}>'.format(tag.name,''.join(taggify(tag)),tag.name)

演示:

html = '''<html>
 <body>
 <h1>Simple example</h1>
 <p>This is a simple example of html page</p>
 </body>
 </html>'''

soup = BeautifulSoup(html)

''.join(taggify(soup))
Out[34]: '<html><body><h1></h1><p></p></body></html>'

答案 1 :(得分:1)

简单的python正则表达式可以做你想要的:

import re

html = '''<html>
<body>
<h1>Simple example</h1>
<p>This is a simple example of html page</p>
</body>
</html>'''

structure = ''.join(re.findall(r'(</?.+?>|/n+?)', html))

此方法可保留换行符。