用python来进行html页面解析

老规矩,先来一段代码,然后对着代码来讲。 
 

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标签等,遇到<div>标签该如何做,就在start_div函数中进行操作,在遇到</div>标签该如何做,就在函数end_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文件夹内,是标准库。

你可能感兴趣的:(用python来进行html页面解析)