Python:检查在另一个方法中作为参数传递的变量的值?

时间:2010-09-02 05:04:12

标签: python html-parsing

与我之前的问题有些相关。我正在制作一个简单的html解析器来在Python 2.7中使用。我想有多种解析类型,IE可以解析链接,脚本标签,图像等。我正在使用HTMLParser模块,所以我最初的想法只是为我要解析的每个东西单独创建一个类。但那似乎很愚蠢。有没有办法在不创建多个类的情况下这样做?我更熟悉C#,所以我想我只是在 init 方法上传递一个参数来指定要解析的内容,就像在.Net中一样,但是我似乎没有要正确地做。它不起作用,它只是“看起来”不正确。这是当前正在运行的代码:如何将其修改为只能拥有一个类,并且传递的参数指示要解析的HTML标记的类型?

class LinksParser(HTMLParser):
  def __init__(self, url):
    HTMLParser.__init__(self)
    req = urllib2.urlopen(url)
    self.feed(req.read())

  def handle_starttag(self, tag, attrs):
    if tag !='a': return
    for name, value in attrs:
      print("Found Link --> [{0}]{1}".format(name, value))

2 个答案:

答案 0 :(得分:1)

class TagParser(HTMLParser):

    def __init__(self, url, tag):
        HTMLParser.__init__(self)
        self.tag = tag
        req = urllib2.urlopen(url)
        self.feed(req.read())

    def handle_starttag(self, tag, attrs):
        if tag != self.tag: return
        for name, value in attrs:
            print("Found Tag({2}) --> [{0}]{1}".format(name, value, self.tag))

答案 1 :(得分:0)

类似的东西:

class MyParser(HTMLParser):
    def __init__(self, url, tags):
        HTMLParser.__init__(self)
        self.tags = tags
        req = urllib2.urlopen(url)
        self.feed(req.read())

    def handle_starttag(self, tag, attrs):
        if tag not in self.tags: return
        for name, value in attrs:
            print("Found Tag --> [{0}]{1}".format(name, value))

使用类似的方式实例化该类:

p = MyParser("http://www.google.com", [ 'a', 'img' ])