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