2012-02-12 68 views
1

我有这样的HTML列表中:如何打开一个HTML嵌套列表转换为Python的一个

lista = """ 
<ul> 
<li>Arts &amp; Entertainment 
    <ul> 
     <li>Celebrities &amp; Entertainment News</li> 
     <li>Comics &amp; Animation 
     <ul> 
     <li>Anime &amp; Manga</li> 
     <li>Cartoons</li> 
     <li>Comics</li> 
     </ul> 
     </li> 
    </ul> 
</li> 
</ul> 

""" 

,我想将它转化成有用的蟒蛇结构作进一步处理:

什么你有什么建议?还有你会怎么做?

+0

您正在使用哪个HTML解析器? – 2012-02-12 13:34:05

+0

正如@jcollado建议我使用美丽的汤。 – lorussian 2012-02-12 17:35:54

回答

2

随着BeautifulSoup,我会做这样的事情:

from BeautifulSoup import BeautifulSoup 
from pprint import pprint 

def parseList(tag): 
    if tag.name == 'ul': 
     return [parseList(item) 
       for item in tag.findAll('li', recursive=False)] 
    elif tag.name == 'li': 
     if tag.ul is None: 
      return tag.text 
     else: 
      return (tag.contents[0].string.strip(), parseList(tag.ul)) 

soup = BeautifulSoup(lista) 
pprint(parseList(soup.ul)) 

输出示例:

[(u'Arts &amp; Entertainment', 
    [u'Celebrities &amp; Entertainment News', 
    (u'Comics &amp; Animation', 
    [u'Anime &amp; Manga', u'Cartoons', u'Comics'])])] 

注意,对于列表包含未编号列表的项目,将返回一个元组,其中第一个元素是列表项中的字符串,而第二个元素是包含未编号列表内容的列表。

+0

我必须承认我有一些麻烦处理它。我想打印整个清单,保持层次结构。例如用不同的缩进打印它... – lorussian 2012-02-12 16:37:58

0

您可以使用映射类型:字典

相关问题