首页 > 解决方案 > 将包含 html 标记的字符串拆分为 Python 中的构建块

问题描述

我有字符串,例如:

part one<p>part two</p><p>part three <a href="/links/link1">part four</a>part five</p><li>part six <a href="/links/link2">part seven</a>part eight</li>

我想生成一个python列表,如:

['part one','part two','part three','/links/link1','part four','part five','part six','/links/link2','part seven','part eight']

列表中的顺序应遵循字符串中出现的顺序。字符串可能没有/更多/更少标签和嵌套标签。

我已经阅读了一些相当相似的问题的答案,但找不到解决这个特定问题的答案。我尝试过 BeautifulSoup 之类的包,但无法提取所有部分并按出现顺序。

我很感激任何帮助。谢谢。

标签: pythonpython-3.xbeautifulsoup

解决方案


您可以使用内置的 HTML 解析器类来遍历字符串并跟踪您需要的位。

from html.parser import HTMLParser


class BuildingBlocksParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.bits = []

    def handle_starttag(self, tag, attrs):
        for key, value in attrs:
            self.bits.append(value)

    def handle_data(self, data):
        self.bits.append(data)


parser = BuildingBlocksParser()
parser.feed(
    'part one<p>part two</p><p>part three <a href="/links/link1">part four</a>part five</p><li>part six <a href="/links/link2">part seven</a>part eight</li>'
)
print(parser.bits)

输出

['part one', 'part two', 'part three ', '/links/link1', 'part four', 'part five', 'part six ', '/links/link2', 'part seven', 'part eight']

推荐阅读