Python中使用HTMLParser解析html实例


Posted in Python onFebruary 08, 2015

前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了urllib和HTMLParser两个库.urllib可以将网页爬下来,然后交由HTMLParser解析,初次使用这个库,在查官方文档时也遇到了一些问题,在这里写下来与大家分享.

一个例子

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

  def handle_starttag(self, tag, attrs):

    print "a start tag:",tag,self.getpos()

parser=MyHTMLParser()

parser.feed('<div><p>"hello"</p></div>')

这个例子里HTMLParser是基类,重载了他的handle_starttag方法,输出了一些信息.parser是MyHTMLParser的实例,调用feed方法开始解析函数.值得注意的是,不需要显示调用handle_starttag方法就会执行.

HTMLParser方法的调用方式困惑了我很长时间,看了很多博文才恍然大悟,HTMLParser含有的方法分为两类,一类是需要显式调用的,而另一类不需显示调用.

不需显式调用的方法

下面的这些函数在解析的过程中会触发,但是默认情况下不会产生任何副作用,因而我们要根据自己的需求重载.

1.HTMLParser.handle_starttag(tag,attrs): 解析时遇到开始标签调用,如<p class='para'>,参数tag是标签名,这里是'p',attrs为标签所有属性(name,value)列表,这里是[('class','para')]

2.HTMLParser.handle_endtag(tag): 遇到结束标签时调用,tag是标签名

3.HTMLPars.handle_data(data): 遇到标签中间的内容时调用,如<style> p {color: blue; }</style>,参数data为开闭标签间的内容.值得注意的是在形如<div><p>...</p></div>的位置,并不会在div处调用,而是只在p处调用

当然还有其他函数,这里不做介绍

显式调用的方法

1.HTMLParser.feed(data): 参数为需要解析的html字符串,调用后字符串开始被解析

2.HTMLParser.getpos(): 返回当前的行号和偏移位置,如(23,5)

3.HTMLParser.get_starttag_text(): 返回当前位置最近的开始标签的内容

所有的内容写完了,最后还有一点注意事项,HTMLParser只是一个简单的模块,解析html的功能并不完善,例如不能准确的分别开标签和"自闭标签",看下面代码:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

  def handle_starttag(self,tag,attrs):

    print 'begin tag',tag

  def handle_startendtag(self,tag,attrs):

    print 'begin end tag',tag
str1='<br>'

str2='<br/>'

parser=MyHTMLParser()
parser.feed(str1)    # 输出 "begin tag br"

parser.feed(str2)    # 输出 "begin end br"
Python 相关文章推荐
Python中的super()方法使用简介
Aug 14 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
Python中常用信号signal类型实例
Jan 25 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
PyQt5每天必学之单行文本框
Apr 19 Python
python读出当前时间精度到秒的代码
Jul 05 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python文件路径操作方法总结
Dec 21 Python
python 离散点图画法的实现
Apr 01 Python
Pyhton中防止SQL注入的方法
Feb 05 #Python
Windows系统下安装Python的SSH模块教程
Feb 05 #Python
Python 冒泡,选择,插入排序使用实例
Feb 05 #Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 #Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 #Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 #Python
Python、Javascript中的闭包比较
Feb 04 #Python
You might like
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
php中使用GD库做验证码
2016/03/31 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
JavaScript执行顺序详细介绍
2013/12/04 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
python标准库os库的函数介绍
2020/02/12 Python
Python插件机制实现详解
2020/05/04 Python
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
学籍证明模板
2014/11/21 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
openstack中的rpc远程调用的方法
2021/07/09 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
vue递归实现树形组件
2022/07/15 Vue.js