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__从传递给它的参数-
我避免了廉价的推广步骤避免混淆核心点(跟踪嵌套标签的数量并在记录状态为活动状态时将数据累积到列表中)。



