我正在尝试使用 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://example.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'
, and 'remository'
, 实例属性self.tag
, self.attname
and self.attvalue
, 通过设置__init__
来自传递给它的参数 - 我避免了上面代码中的廉价泛化步骤,以避免模糊核心点(跟踪嵌套标签的计数并在记录状态处于活动状态时将数据累积到列表中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)