加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

将HTML列表转换为嵌套的Python列表

发布时间:2020-12-14 21:14:17 所属栏目:资源 来源:网络整理
导读:如果我有一个嵌套的html(无序)列表,如下所示: ul lia href="Page1_Level1.html"Page1_Level1/a ul lia href="Page1_Level2.html"Page1_Level2/a ul lia href="Page1_Level3.html"Page1_Level3/a/li /ul ul lia href="Page2_Level3.html"Page2_Level3/a/li /
如果我有一个嵌套的html(无序)列表,如下所示:
<ul>
    <li><a href="Page1_Level1.html">Page1_Level1</a> 
    <ul>
        <li><a href="Page1_Level2.html">Page1_Level2</a> 
            <ul>
                <li><a href="Page1_Level3.html">Page1_Level3</a></li>
            </ul>
            <ul>
                <li><a href="Page2_Level3.html">Page2_Level3</a></li>
            </ul>
            <ul>
                <li><a href="Page3_Level3.html">Page3_Level3</a></li>
            </ul>
        </li>
    </ul>
    </li>
    <li><a href="Page2_Level1.html">Page2_Level1</a> 
    <ul>
        <li><a href="Page2_Level2.html">Page2_Level2</a></li>
    </ul>
    </li>
</ul>

如何在Python中形成嵌套列表?例如:

["Page1_Level1.html",["Page1_Level2.html",["Page1_Leve3.html","Page2_Level3.html","Page3_Level3.html"]],"Page2_Level1.html",["Page2_Level2.html"]]

我认为像Beautiful Soup和HTML Parser这样的库有可以做到这一点,但是我还没弄清楚它.感谢您的帮助/指点!

解决方法

您可以采用递归方法:
from pprint import pprint
from bs4 import BeautifulSoup

text = """your html goes here"""

def find_li(element):
    return [{li.a['href']: find_li(li)}
            for ul in element('ul',recursive=False)
            for li in ul('li',recursive=False)]


soup = BeautifulSoup(text,'html.parser')
data = find_li(soup)
pprint(data)

打印:

[{u'Page1_Level1.html': [{u'Page1_Level2.html': [{u'Page1_Level3.html': []},{u'Page2_Level3.html': []},{u'Page3_Level3.html': []}]}]},{u'Page2_Level1.html': [{u'Page2_Level2.html': []}]}]

仅供参考,这就是为什么我必须在这里使用html.parser:

> Don’t put html,head and body tags automatically,beautifulsoup

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读