从HTMLParser的handle_starttag返回数据

5 投票
1 回答
6148 浏览
提问于 2025-04-18 09:59

我的问题是这个的简单版本

我有一个YouTube的iframe:

<iframe width="560" height="315" src="//www.youtube.com/embed/fY9UhIxitYM" frameborder="0" allowfullscreen></iframe>

我正在做一个小的网页应用,需要提取这个随机代码(在这个例子中是fY9UhIxitYM)。我想使用标准库,而不是导入Beautiful Soup。

from HTMLParser import HTMLParser

class YoutubeLinkParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.data = []

    def handle_starttag(self, tag, attrs):
        data = attrs[2][1].split('/')[-1]
        self.data.append(data)

iframe = open('iframe.html').read()
parser = YoutubeLinkParser()
linkCode = parser.feed(iframe)

我找到的例子使用了handle_data(self, data),但是我需要的是打开标签的属性信息。我可以在这个方法里打印出值,但当我尝试获取返回值时,linkCode却返回'none'。

我缺少了什么呢?谢谢!

1 个回答

7

feed() 方法不返回任何东西,这就是你得到 None 的原因。相反,你应该在调用 feed() 之后,查看 data 属性的值:

from HTMLParser import HTMLParser

class YoutubeLinkParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        self.data = attrs[2][1].split('/')[-1]

iframe = open('iframe.html').read()
parser = YoutubeLinkParser()
parser.feed(iframe)
print parser.data

打印结果:

fY9UhIxitYM

撰写回答