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)
提交文本给解析器。不完整的会缓冲直到更多的数据被送入或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. >),名称是通用实体引用(e.g. 'gt')。
HTMLParser.handle_charref(name)
处理十进制和十六进制数字字符引用的形式&#NNN; 和 &#xNNN。例如,>的十进制的表示是>,而十六进制数是>,这种情况下,该方法将接收到'62'或' X3E ' 。
HTMLParser.handle_comment(data)
处理注释(e.g. <!--comment-->)。
例如,注释<! - 评论 - >将导致此方法被称为“评论”的说法。
Internet Explorer条件的注释 (condcoms)的内容也将被发送到这个方法,所以<!--[if IE 9]>IE9-specificcontent<![endif,这种方法会收到'[if IE 9]>IE-specificcontent<![endif]' 。
HTMLParser.handle_decl(decl)
处理HTML DOCTYPE声明(例如,(e.g. <!DOCTYPE html>).
HTMLParser.handle_pi(data)
处理指令时遇到的。数据参数将包含整个的处理指令。例如,对于处理指令<?proc color='red'>,则此方法将被调用为handle_pi("proccolor='red'")。
注意: HTMLParser类使用SGML的语法规则的处理指令。一个XHTML处理指令拖尾的?也包括在数据中。
The HTMLParser class uses theSGML syntactic rules for processing instructions. An XHTML processinginstruction using the trailing '?' will cause the'?' to be includedin data.
HTMLParser.unknown_decl(data)
处理不认识的确认声明。
更多实例:
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()
print"DOCTYPE:"
parser.feed('<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'
'"http://www.w3.org/TR/html4/strict.dtd">')
print"img:"
parser.feed('<imgsrc="python-logo.png" alt="The Python logo">')
print"h1:"
parser.feed('<h1>Python</h1>')
print"style:"
parser.feed('<styletype="text/css">#python { color: green }</style>')
print"script:"
parser.feed('<scripttype="text/javascript">')
parser.reset()
print"comments"
parser.feed('<!--a comment -->''<!--[if IE 9]>IE-specific content<![endif]-->')
print"numeric:"
parser.feed('>>>')
print"Feeding incomplete chunks"
forchunk in ['<sp', 'an>buff', 'ered ', 'text</s', 'pan>']:
parser.feed(chunk)
print" invalid HTML :"
parser.feed('<p><aclass=link href=#main>tag soup</p ></a>')
执行结果:
DOCTYPE:
Decl : DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"
img:
Starttag: img
attr: ('src', 'python-logo.png')
attr: ('alt', 'The Python logo')
h1:
Starttag: h1
Data : Python
Endtag : h1
style:
Starttag: style
attr: ('type', 'text/css')
Data : #python { color: green }
Endtag : style
script:
Starttag: script
attr: ('type', 'text/javascript')
comments
Comment : acomment
Comment : [if IE 9]>IE-specificcontent<![endif]
numeric:
Namedent: >
Nument : >
Nument : >
Feedingincomplete chunks
Starttag: span
Data : buff
Data : ered
Data : text
Endtag : span
invalid HTML :
Starttag: p
Starttag: a
attr: ('class', 'link')
attr: ('href', '#main')
Data : tag soup
Endtag : p
Endtag : a
参考资料:
http://docs.python.org/2/library/htmlparser.html
python模块介绍- HTMLParser 简单的HTML和XHTML解析器的更多相关文章
- python模块介绍- multi-mechanize 性能测试工具
python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...
- python模块介绍- xlwt 创建xls文件(excel)
python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- python模块介绍- binascii 二进制和ASCII转换
python模块介绍-binascii二进制和ASCII转换 目录 项目简介 简介: Uu编码 Binhex编码 Base64编码 QP码 CRC校验和 二进制转换 其他实例 项目简介 Python中 ...
- python模块之HTMLParser(原理很大程度上就是对类构造的熟练运用)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser(原理很大程度上就是对类构造的熟练运用) import HTMLPar ...
- python模块之HTMLParser之穆雪峰的案例(理解其用法原理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser之穆雪峰的案例(理解其用法原理) #http://www.cnblog ...
- python模块之HTMLParser抓页面上的所有URL链接
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser抓页面上的所有URL链接 import urllib #MyParse ...
- python模块之HTMLParser解析出URL链接
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser解析出URL链接 #http://www.cnblogs.com/mf ...
- 【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies
一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTM ...
随机推荐
- 在UITouch事件中画圆圈-iOS8 Swift基础教程
这篇教程主要内容展示如何利用Core Graphics Framework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过. 打开Xcode,新建项目选择Sin ...
- 基于CAShapeLayer和贝塞尔曲线的圆形进度条动画【装载】
初次接触CAShapeLayer和贝塞尔曲线,看了下极客学院的视频.对初学者来说感觉还不错.今天来说一个通过CAShapeLayer和贝塞尔曲线搭配的方法,创建的简单的圆形进度条的教程先简单的介绍下C ...
- [Swust OJ 234]--IrreducibleNumber(题意太坑)
题目链接:http://acm.swust.edu.cn/problem/0234/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- 安装 unixbench 报错解决方法
一.准备工作 1.首先使用root用户登陆. 2.运行Unixbeanch需要GCC的支持,在安装Unixbeanch之前,需要先安装GCC,在Debian中,直接执行如下命令: 复制代码 代码如下: ...
- 使用jquery 1.7 及以后的版本 attr 问题
跟进jquery的代码进行检查,发现问题出在下面的代码中: if ( notxml ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ n ...
- Altera FPGA中的pin简介
第一步要看的肯定是pin planner ,这个是黑金四代EP4CE15F17C8的视图 先就是发现他们pin有不同的颜色区域,分别对应不同的bank,应该是有的设计里面要求pin在同一个bank吧( ...
- 基于visual Studio2013解决算法导论之054图的邻接矩阵表示
题目 图的邻接矩阵表示 解决代码及点评 // 图的邻接矩阵表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <l ...
- HDU 5009 DP
2014 ACM/ICPC Asia Regional Xi'an Online 对于N个数 n(1 ≤ n ≤ 5×104), 把N个数分成随意个区间,每一个区间的值是该区间内不同数字个数的平方和, ...
- Servlet 实现文件的上传与下载
这段时间尝试写了一个小web项目,其中涉及到文件上传与下载,虽然网上有很多成熟的框架供使用,但为了学习我还是选择了自己编写相关的代码.当中遇到了很多问题,所以在此这分享完整的上传与下载代码供大家借鉴. ...
- Adobe Acrobat Ⅺ Pro安装激活
1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...