我正在制作一个简单的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>
我尝试了HTMLParser和BeautifulSoup,但我不明白如何只更改HTML的某些部分,而不破坏整个HTML。
我建议使用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"))