用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文件夹内,是标准库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值