【问题标题】:Extract data from "p" html element with python lxml使用python lxml从“p”html元素中提取数据
【发布时间】:2015-11-07 18:12:32
【问题描述】:

我想提取phtml 元素中的所有数据,但只对“标题”进行不同处理,例如:<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...

【问题讨论】:

  • but to treat differently only to the "headers" such as: &lt;strong&gt;header1&lt;/strong&gt; 是什么意思?你能解释一下吗?
  • 您能否至少展示一下示例输入的预期结果?
  • 假设我在string 中汇总了所有数据,并且我只想突出显示标题。现在我无法区分,所以我的字符串就像:header1 data data data 1... header2 data data data 2...。我想这样强调它:[[header1]] data data data 1... [[header2]] data data data 2...

标签: python html parsing lxml


【解决方案1】:

简短的回答是你需要实现你的类MyParser

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

【讨论】:

  • 问题是我无法区分标签内的数据。我怎么知道&lt;strong&gt;header1&lt;/strong&gt; 是什么,什么不是?
  • @hudac:我描述了如何知道“强”标签中的内容和不包含的内容。你都尝试了些什么? MyParser的方法中有代码吗?您了解该课程的哪些部分,哪些部分您不了解?
  • 谢谢,我以为我看不到strong 标签,但我可以。
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2016-05-11
  • 2019-11-20
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多