如何使用python HTMLParser库从特定的div标签提取数据?
我正在尝试使用python HTMLParser库从HTML页面中获取值。我要保留的值在此html元素内:
...<div id="remository">20</div>
...
到目前为止,这是我的HTMLParser类:
class LinksParser(HTMLParser.HTMLParser): def __init__(self):
HTMLParser.HTMLParser.__init__(self)
self.seen = {}
def handle_starttag(self, tag, attributes):
if tag != 'div': return
for name, value in attributes:
if name == 'id' and value == 'remository':
#print value
return
def handle_data(self, data):
print data
p = LinksParser()
f = urllib.urlopen("http://domain.com/somepage.html")
html = f.read()
p.feed(html)
p.close()
有人可以指出我正确的方向吗?我希望类功能获得值20。
回答:
class LinksParser(HTMLParser.HTMLParser): def __init__(self):
HTMLParser.HTMLParser.__init__(self)
self.recording = 0
self.data = []
def handle_starttag(self, tag, attributes):
if tag != 'div':
return
if self.recording:
self.recording += 1
return
for name, value in attributes:
if name == 'id' and value == 'remository':
break
else:
return
self.recording = 1
def handle_endtag(self, tag):
if tag == 'div' and self.recording:
self.recording -= 1
def handle_data(self, data):
if self.recording:
self.data.append(data)
self.recording``div
从“触发”开始计数嵌套标记的数量。当我们处于以触发标签为根的子树中时,我们将数据存储在中self.data
。
解析末尾的数据保留在其中self.data
(字符串列表,如果未满足触发标签,则可能为空)。您可以从类外部的代码在解析结束时直接从实例访问列表,也可以为此目的添加适当的访问器方法,具体取决于目标是什么。
这个类可以很容易地取得多一点的一般使用,以代替在代码中看到的常量文字字符串上面,'div'
,'id'
,和'remository'
,实例的属性self.tag
,self.attname
并且self.attvalue
,通过设置__init__
从传递给它的参数-
我避免了廉价的推广步骤避免混淆核心点(跟踪嵌套标签的数量并在记录状态为活动状态时将数据累积到列表中)。
以上是 如何使用python HTMLParser库从特定的div标签提取数据? 的全部内容, 来源链接: utcz.com/qa/428540.html