日期:2014-05-16  浏览次数:20682 次

python模块介绍- HTMLParser 简单的HTML和XHTML解析器

python模块介绍- HTMLParser 简单的HTML和XHTML解析器

2013-09-11 磁针石

#承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319

#博客:http://blog.csdn.net/oychw

#版权所有,转载刊登请来函联系

# 深圳测试自动化python项目接单群113938272深圳广州软件测试开发 6089740

#深圳湖南人业务户外群 66250781武冈洞口城步新宁乡情群49494279

#参考资料:python手册

注意
HTMLParser的模块已经在Python 3中更名为html.parser。 2to3工具会自动转换import语句到Python3。
python2.2新增该模块。
源代码:lib/ HTMLParser.py

简介

该模块定义了一个HTMLParse类作为解析格式化的文本文件HTML(超文本标记语言)和XHTML的基础。不像htmllib的解析器,这个解析器不基于sgmllib模块的SGML解析器。

class HTMLParser.HTMLParser
               HTMLParser的实例接受html数据,在碰到开始tag,结束tag,文本,注释和其他标记元素时调用对应的处理方法。用户需要继承的HTMLParser并重载一些方法来实现期望的行为。

               HTMLParser类无任何参数。

               不像htmllib的解析器,解析器不检查结束标签是否匹配开始标签,或为隐式关闭标签调用结束标签处理器。

另htmllib和sgmllib在python3已经被取消,不建议使用。

异常:

exception HTMLParser.HTMLParseError

HTMLParser的是能够处理零碎的标签,但在某些情况下,它也可能会遇到错误而引发异常。此异常提供了三个属性:msg是一个简短描述错误的消息,lineno行号,offset列偏移。

 

简单实例:

fromHTMLParser import HTMLParser

fromhtmlentitydefs import name2codepoint

 

classMyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):

        print "Start tag:", tag

        for attr in attrs:

            print "     attr:", attr

    def handle_endtag(self, tag):

        print "End tag  :", tag

    def handle_data(self, data):

        print "Data     :", data

    def handle_comment(self, data):

        print "Comment  :", data

    def handle_entityref(self, name):

        c = unichr(name2codepoint[name])

        print "Named ent:", c

    def handle_charref(self, name):

        if name.startswith('x'):

            c = unichr(int(name[1:], 16))

        else:

            c = unichr(int(name))

        print "Num ent  :", c

    def handle_decl(self, data):

        print "Decl     :", data

 

parser= MyHTMLParser()

printparser.feed('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"''"http://www.w3.org/TR/html4/strict.dtd">')

 

printparser.feed('<img src="python-logo.png" alt="The Pythonlogo">')

执行结果:

Decl     : DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"

None

Starttag: img

     attr: ('src', 'python-logo.png')

     attr: ('alt', 'The Python logo')

None

 

HTMLParser的方法:

HTMLParser.feed(data