【问题标题】:can't access new variables in HTMLParser无法访问 HTMLParser 中的新变量
【发布时间】:2011-06-14 21:14:29
【问题描述】:

我似乎无法在 HTMLParser 中添加访问任何新变量。我正在关注我见过的例子here。在 __init__ 中添加变量时我没有收到任何错误,但是当我尝试以一种方法访问它时,我被告知它不存在。

#!/usr/bin/env python
from HTMLParser import HTMLParser
import urllib

class parse(HTMLParser):

    def __init__(self, data):
        HTMLParser.__init__(self)
        self.feed(data)
        self.foo = 'err'

    def handle_starttag(self, tag, attrs):
        print self.foo
        if tag == 'a':
            for attr, value in attrs:
                if attr == 'href':
                    print value[10:]
                    continue

    def handle_data(self, text):
        pass

    def handle_endtag(self, tag):
        pass


page = urllib.urlopen('http://docs.python.org/library/htmlparser.html').read()
p = parse(page)

这是输出:

Traceback (most recent call last):
  File "./doit.py", line 34, in <module>
    p = parse(page)
  File "./doit.py", line 9, in __init__
    self.feed(data)
  File "/usr/lib/python2.6/HTMLParser.py", line 108, in feed
    self.goahead(0)
  File "/usr/lib/python2.6/HTMLParser.py", line 148, in goahead
    k = self.parse_starttag(i)
  File "/usr/lib/python2.6/HTMLParser.py", line 271, in parse_starttag
    self.handle_starttag(tag, attrs)
  File "./doit.py", line 14, in handle_starttag
    print self.foo
AttributeError: parse instance has no attribute 'foo'

感谢您的帮助

【问题讨论】:

    标签: python oop html-parsing


    【解决方案1】:

    你只需要交换这两行

    self.feed(data)
    self.foo = 'err'
    

    调用.feed() 隐式调用.handle_starttag(),但这是在代码中创建属性之前完成的。

    可能更好的主意是根本不向构造函数提供数据,而是显式调用.feed()

    【讨论】:

      【解决方案2】:
      self.handle_starttag(tag, attrs)
      

      HTMLParser.py之前被调用

      self.foo = 'err'
      

      已在您的代码中设置。

      试试:

      self.foo = 'err'
      self.feed(data)
      

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 2021-09-22
        • 1970-01-01
        • 2017-11-21
        • 2016-07-20
        • 1970-01-01
        • 2018-01-10
        • 1970-01-01
        • 2020-12-13
        相关资源
        最近更新 更多