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使用PyCharm进行远程开发和调试
Nov 02 Python
Python机器学习之决策树算法
Dec 22 Python
Python 将pdf转成图片的方法
Apr 23 Python
python对离散变量的one-hot编码方法
Jul 11 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
python+opencv实现车道线检测
Feb 19 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 Python
Python基础之常用库常用方法整理
Apr 30 Python
python tqdm用法及实例详解
Jun 16 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
重点工程汇报材料
2014/08/27 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
公证书格式
2015/01/23 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
利用python做数据拟合详情
2021/11/17 Python
MySQL 条件查询的常用操作
2022/04/28 MySQL