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

作者:襄阳西继迅达电梯有限公司  发布时间:2017-09-03 12:10:33
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)

提交文本给解析器。不完整的会缓冲直到更多的数据被送入或close()被调用。数据可以是Unicode(推荐)或str。

HTMLParser.close()

强制处理所有缓冲数据,好像比一个文件结束标志。派生类可以重新定义,在输入结束,而是重新定义的版本应该总是调用HTMLParser的基类方法close()。

HTMLParser.reset()

重置实例。所有未处理数据会丢失。

HTMLParser.getpos()

返回当前的行号和偏移量。

HTMLParser.get_starttag_text()

返回最近标记的文本。一般用不上,偶尔用于比较文本。

下面的方法在遇到数据或者标签时会调用,除了handle_startendtag外,父类通常什么都不做,需要子类重载。

HTMLParser.handle_starttag(tag, attrs)

来处理一个标签(如<divid="main"> )开始。

标签的名称会转换为小写。的attrs参数是一个列表,包含TAG中的(name, value)对。Name转为小写。比如会转为handle_starttag('a', [('href','http://www.cwi.nl/')])。

2.6版本中更改: htmlentitydefs的实体引用全部改成了属性值。

HTMLParser.handle_endtag(tag)

HTMLParser.handle_endtag (标签)

处理结束标签,同样会转为小写。

HTMLParser.handle_startendtag(tag, attrs)

和handle_starttag()相似,专题,在遇到XHTML风格的空标签比如(<img />)使用。默认实现只是调用handle_starttag()和handle_endtag()。

HTMLParser.handle_data(data)

处理任意数据(如文本节点和内容的<SCRIPT>的... < / SCRIPT >和<style>...</style>).。

HTMLParser.handle_entityref(name)

处理指定的字符引用的形式&name; (e.g. &gt;),名称是通用实体引用(e.g. 'gt')。

HTMLParser.handle_charref(name)

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉SEO http://www.feimao666.com

  • 上一篇:独立服务器网站选择指南_如何选择VPS、租用服务器、托
  • 下一篇:最后一页
  •