Python HTML解析器

3 投票
3 回答
8680 浏览
提问于 2025-04-17 00:23

我正在用HTMLParser解析一个HTML文档,我想打印出

标签之间的内容。

看看我的代码片段。

    def handle_starttag(self, tag, attrs):
        if tag == 'p':
            print "TODO: print the contents"

3 个回答

1

我发现这样做对我的代码没有用,所以我在外面定义了一个 tag_stack = [],就像是一个全局变量。

from html.parser import HTMLParser
    tag_stack = []
    class MONanalyseur(HTMLParser):

    def handle_starttag(self, tag, attrs):
        tag_stack.append(tag.lower())
    def handle_endtag(self, tag):
        tag_stack.pop()
    def handle_data(self, data):
        if tag_stack[-1] == 'head':
            print(data)

parser=MONanalyseur()
parser.feed()    
7

根据@tauran发的内容,你可能想要做类似这样的事情:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def print_p_contents(self, html):
        self.tag_stack = []
        self.feed(html)

    def handle_starttag(self, tag, attrs):
        self.tag_stack.append(tag.lower())

    def handle_endtag(self, tag):
        self.tag_stack.pop()

    def handle_data(self, data):
        if self.tag_stack[-1] == 'p':
            print data

p = MyHTMLParser()
p.print_p_contents('<p>test</p>')

现在,你可能想把所有的<p>内容放进一个列表里,然后把这个列表作为结果返回,或者做其他类似的事情。

今天学到的:在使用这种库时,你需要考虑的概念!

5

我扩展了来自文档的示例:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        print "Encountered the beginning of a %s tag" % tag

    def handle_endtag(self, tag):
        print "Encountered the end of a %s tag" % tag

    def handle_data(self, data):
        print "Encountered data %s" % data

p = MyHTMLParser()
p.feed('<p>test</p>')

-

Encountered the beginning of a p tag
Encountered data test
Encountered the end of a p tag

撰写回答