老规矩,先来一段代码,然后对着代码来讲。
class novelContentParser(sgmllib.SGMLParser):
'''
novelContentParser类,继承自sgmllib,用来解析出具体的小说章节内容
'''
def __init__(self, title):
sgmllib.SGMLParser.reset(self)
self.nc = novelContent()
self.nc.title = title
self.is_nc = False
def start_div(self, attrs):
if attrs[0][1] == "novel_content":
self.is_nc = True
def end_div(self):
self.is_nc = False
def handle_data(self, text):
if self.is_nc == True:
self.nc.content += text + "\n"
首先需要实现一个继承自sgmllib.SGMLParser的类,并且由这个类来做对应的解析。__init__函数里实现初始化,需要注意的是sgmllib.SGMLParser.reset(self),这个是初始化工作中必须要进行的。
对于html页面的解析是按照标签来进行的,如a标签,div标签等,遇到
对于所有没有标签的内容,都会在handle_data中进行操作。
对于该类的调用,则是将对应的url链接打开后作为该类的输入,调用方法见以下代码:
import urllib2
url = "http://www.baidu.com"
f = urllib2.urlopen(url)
ncp = novelContentParser("test")
ncp.feed(f.read())
当然,这个只是个例子,实际运行会出错,你需要按照自己需要解析的页面去写对应的解析类,或者通用的解析类。
如果在解析过程中遇到问题,想看下具体的问题在哪里,也可以找到对应的sgmllib.py文件,来直接对保存下来的html文件进行一次解析,使用方法是:python sgmlib.py tmp.html,这样便于你去分析自己的解析类有什么样的问题。sgmllib.py文件在你Python安装目录的lib文件夹内,是标准库。