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 字符串定义
Sep 25 Python
Python牛刀小试密码爆破
Feb 03 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
Python实现方便使用的级联进度信息实例
May 05 Python
python修改字典内key对应值的方法
Jul 11 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
基于python的ini配置文件操作工具类
Apr 24 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
python 将html转换为pdf的几种方法
Dec 29 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
JavaScript中Function详解
2015/02/27 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
使用vue构建一个上传图片表单
2017/07/04 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Python进程池Pool应用实例分析
2019/11/27 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
函授本科毕业生自我鉴定
2013/10/16 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
办公室规章制度范本
2015/08/04 职场文书
欧元符号 €
2022/02/17 杂记