0

在 HTML 文件的某处,我有一个div带有这样的内部标签:

<div class="mydiv">
    <h3><a href="#">TEXT</a></h3>
</div>

如何a使用 Python 中的 HTMLParser 类查找元素内的文本?我想用 HTMLParser 来做,而不是 BeautifulSoup。

4

1 回答 1

1

这应该有效:

"""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()方法是为了应对隐式封闭标签的可能性;你可能需要也可能不需要。

于 2013-08-16T18:39:41.003 回答