在 HTML 文件的某处,我有一个div
带有这样的内部标签:
<div class="mydiv">
<h3><a href="#">TEXT</a></h3>
</div>
如何a
使用 Python 中的 HTMLParser 类查找元素内的文本?我想用 HTMLParser 来做,而不是 BeautifulSoup。
在 HTML 文件的某处,我有一个div
带有这样的内部标签:
<div class="mydiv">
<h3><a href="#">TEXT</a></h3>
</div>
如何a
使用 Python 中的 HTMLParser 类查找元素内的文本?我想用 HTMLParser 来做,而不是 BeautifulSoup。
这应该有效:
"""innerlink.py - print text of e.g. `<div><h3><a>This</a></h3></div>`."""
from html.parser import HTMLParser
class InnerLinkParser(HTMLParser):
"""A parser for HTML with links in h3s in divs."""
def __init__(self):
HTMLParser.__init__(self)
self.stack = []
def handle_starttag(self, tag, attrs):
self.stack.append(tag)
def handle_endtag(self, tag):
while self.stack:
item = self.stack.pop()
if item == tag:
break
else:
raise ValueError("unmatched closing %r tag." % tag)
def handle_data(self, data):
if self.stack[-3:] == ["div", "h3", "a"]:
print(data)
def parse(html):
"""Feed the parser with some HTML."""
parser = InnerLinkParser()
parser.feed(html)
用法:
>>> from innerlink import parse
>>> with open("fragment.html") as f:
... parse(f.read())
...
TEXT
编写该handle_endtag()
方法是为了应对隐式封闭标签的可能性;你可能需要也可能不需要。