使用 python lxml 从 "p" html 元素中提取数据

Extract data from "p" html element with python lxml

我想提取 p html 元素中的所有数据,但仅对 "headers" 进行不同处理,例如:<strong>header1</strong>.
有没有办法用 python lxml 来做到这一点? 使用以下代码:

parser = etree.HTMLParser(target=MyParser())
etree.HTML(htmlContent, parser)

class MyParser 是:

class MyParser(object):
    def start(self, tag, attrib):
        pass
    def end(self, tag):
        pass
    def data(self, data):
        --> Here, differentiate between "normal data" and <strong>data</strong>
    def close(self):
        pass

html 示例:

<div class="entry-content clearfix">
    <p style="text-align: center;"><span style="text-decoration: underline;"><strong>header1</strong></span>:<br />
        data data 1...</p>
    <p style="text-align: center;"><span style="text-decoration: underline;"><strong>header2</strong></span>:<br />
        data data 2...</p>
    <p style="text-align: center;"><span style="text-decoration: underline;"><strong>header3</strong></span>:<br />
        data data 3...<br />
        data data 3...<br />
        data data 3...</p>
</div>

我想做的事的例子: 假设我将所有数据汇总在 string 中,我只想突出显示 headers.
现在我无法区分,所以我的字符串会像:

header1 data data data 1... header2 data data data 2...

我想突出显示它,所以它会是这样的:

[[header1]] data data data 1... [[header2]] data data data 2...

简短的回答是您需要实施您的 class MyParser

当看到元素的开始标记时,将其压入堆栈。当看到元素的结束标记时,将其从堆栈中弹出。收到数据后,您将知道自己在哪个标签中:堆栈中的顶部标签。状态机模式往往适用于这种解析需求。