从 HTMLParser handle_starttag 返回数据

McP*_*dr0 4 html python parsing class

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

我有一个 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)
Run Code Online (Sandbox Code Playgroud)

我发现的示例使用 handle_data(self, data),但我需要有关 open 标记的 attr 的信息。我可以打印方法中的值,但是当我尝试获取返回值时,linkCode 返回“none”。

我错过了什么?谢谢!

ale*_*cxe 6

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
Run Code Online (Sandbox Code Playgroud)

印刷:

fY9UhIxitYM
Run Code Online (Sandbox Code Playgroud)