提问人:Irina Shishilova 提问时间:9/18/2023 最后编辑:Irina Shishilova 更新时间:9/18/2023 访问量:42
使用 Python 替换 HTML 文档中的 HTML 标记,而不修改文档的其余部分
Replace an HTML tag in an HTML document using Python without modifying the rest of the document
问:
我正在制作一个简单的 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。
答:
2赞
Pavel Geveiler
9/18/2023
#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("products"))
您将获得:
<ul>
<li id="menu_home">
<a href="/">
Home
</a>
</li>
<li id="menu_products">
<b>
Products
</b>
</li>
<li id="menu_about">
<a href="/about.html">
About
</a>
</li>
</ul>
评论