从HTMLParser handle_starttag返回数据

时间:2014-06-16 20:05:04

标签: python html class parsing

My question is a simpler version of this

我有一个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),但我需要有关open标记的attr的信息。我可以在方法中打印值,但是当我尝试获取返回值时,linkCode返回'none'。

我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:4)

feed()方法无法返回任何内容 - 这就是您获得None的原因。相反,请在调用data后阅读feed()属性的值:

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