Python: Проверить значение переменной, переданной в качестве параметра в другом методе? - PullRequest
0 голосов
/ 02 сентября 2010

Отчасти связано с моим предыдущим вопросом.Я делаю простой 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 ]

1 голос
/ 02 сентября 2010
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))
0 голосов
/ 02 сентября 2010

Примерно так:

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' ])
...