You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析lxml.etree转Markdown时如何保留粗体格式

itertext()会直接提取所有文本节点、忽略标签语义,所以无法保留格式,你可以通过递归遍历节点、对指定标签的内容手动加Markdown加粗标记实现需求。

实现逻辑

  • 遍历目标元素下的所有节点,区分普通文本节点和元素节点
  • 普通文本节点直接保留内容
  • 识别为粗体的元素(示例中为nobr,可按需添加b、strong等其他标签),返回内容时前后包裹*
  • 其他元素递归处理内部节点即可

代码示例

from lxml import etree

def parse_to_md(element, bold_tags=("nobr", "strong", "b")):
    content_parts = []
    # 遍历当前节点下所有子节点(含文本节点、元素节点)
    for node in element.xpath("node()"):
        if isinstance(node, str):
            # 普通文本直接追加,示例中自带多余双引号可按需做strip处理
            content_parts.append(node.strip('"'))
        elif isinstance(node, etree._Element):
            inner = parse_to_md(node, bold_tags)
            # 粗体标签内容加*包裹
            if node.tag.lower() in bold_tags:
                content_parts.append(f"*{inner}*")
            else:
                content_parts.append(inner)
    return "".join(content_parts)

# 测试你的示例场景
test_html = '''<li id="id1">
"Normal text "
<nobr>bold</nobr>
.
</li>'''
element = etree.fromstring(test_html)
print(parse_to_md(element))

运行后输出结果为:Normal text *bold*.,符合保留粗体格式的要求。

你可以根据实际页面的标签规则调整bold_tags的取值,适配更多粗体对应的HTML标签。

内容的提问来源于stack exchange,提问作者Hamperfait

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:18:04