【问题标题】:return data from HTMLParser handle_starttag从 HTMLParser handle_starttag 返回数据
【发布时间】:2014-08-06 17:30:11
【问题描述】:

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

我错过了什么?谢谢!

【问题讨论】:

    标签: python html class parsing


    【解决方案1】:

    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
    

    【讨论】:

    • 我知道我从解决方案开始看不到它。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2014-10-16
    • 2012-03-31
    • 2019-01-26
    • 1970-01-01
    • 2017-06-17
    • 2021-12-06
    相关资源
    最近更新 更多