从" p"中提取数据带有python lxml的html元素

时间:2015-08-14 13:08:32

标签: python html parsing lxml

我想要提取p html个元素中的所有数据,但要区别对待&#34;标题&#34;例如:<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中的所有数据,我想只突出显示标题 现在我无法区分,所以我的字符串就像:

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

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

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

1 个答案:

答案 0 :(得分:1)

简短的回答是,您需要实施班级MyParser

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