使用 Python 替换 HTML 文档中的 HTML 标签,而不修改文档的其余部分

问题描述 投票:0回答:1

我正在制作一个简单的Python + HTML 网站(作为我学习的一部分)。网站菜单如下所示:

<ul>
    <li><a href="/">Home</a></li>
    <li><a href="/products.html">Products</a></li>
    <li><a href="/about.html">About</a></li>
</ul>

该块存储在变量中,当生成任何页面时,其他内容会连接到该变量,并将生成的页面传输到客户端(浏览器)。

我试图将当前打开的菜单项变为粗体(添加 B 标签)并删除链接(删除 A 标签)。例如,如果打开产品页面,菜单应更改为:

<ul>
    <li><a href="/">Home</a></li>
    <li><b>Products</b></li>
    <li><a href="/about.html">About</a></li>
</ul>

我尝试了HTMLParserBeautifulSoup,但我不明白如何只更改HTML的某些部分,而不破坏整个HTML。

python html html-parsing
1个回答
1
投票

我建议使用BeautifulSoup。让我们创建一个 Python 函数。

def get_menu_html(current_page_name):
    # each <li> tag has its own ID
    html = """
        <ul>
            <li id="menu_home"><a href="/">Home</a></li>
            <li id="menu_products"><a href="/products.html">Products</a></li>
            <li id="menu_about"><a href="/about.html">About</a></li>
        </ul>
    """

    soup = BeautifulSoup(html, "html.parser")

    # find the tag <li> by ID
    tag = soup.find(id="menu_" + current_page_name)

    # create a new tag <b> with the same text as in <li>
    newtag = soup.new_tag("b")
    newtag.string = tag.get_text()

    # replace <a> inside <li> to <b>
    # so <li><a>...</a></li> turns into <li><b>...</b></li>
    tag.find("a").replace_with(newtag)

    # return prettified HTML
    return soup.prettify()
    
# try it
print(get_menu_html("home"))
print(get_menu_html("products"))
print(get_menu_html("about"))
© www.soinside.com 2019 - 2024. All rights reserved.