我正在使用Python的HTMLparser,尝试获取特定节点中包含的HTML子树。 我的通用解析器已经可以很好地完成工作,一旦找到感兴趣的标记,我想要将该节点中的数据提供给另一个特定的HTMLParser。
以下是我想要实现的示例:
class genericParser(HTMLParser):
def __init__ (self):
HTMLParser.__init__(self)
self.divFound = False
def handle_starttag (self, tag, attrs):
if tag == "div" and ("class", "good") in attrs:
self.divFound = True
def handle_data (self, data):
if self.divFound:
print data ## print nothing
parser = specificParser ()
parser.feed (data)
self.divFound = False
并使用类似以下内容的genericParser:
并将其提供给genericParser:
<html>
<head></head>
<body>
<div class='good'>
<ul>
<li>test1</li>
<li>test2</li>
</ul>
</div>
</body>
</html>
但是在Python的HTMLParser.handle_data文档中:
该方法用于处理任意数据(例如文本节点以及
<script>...</script>
和<style>...</style>
的内容)。
在我的 genericParser
中,handle_data
中得到的数据为空,因为我的 <div class='good'>
不是一个文本节点。
如何使用HTMLParser检索我的div内部的原始HTML数据?
提前感谢您的帮助。
handle_endtag()
结束感兴趣的块时使用它。这不是我想到的解决方案,但我不再卡住了。感谢您的建议。 - MarcassinBeautifulSoup
提取子树,然后调用你的specificParser。如果你被困在HTMLParser
中,我的想法也是记录每个节点,直到关闭</div>
,但我看到你已经在处理它了。 - Birei