与我之前的问题有些相关。我正在制作一个简单的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))
答案 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' ])