Python中使用HTMLParser解析html实例

作者:junjie 时间:2023-01-17 11:47:16 

前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了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,HTMLParser,html
0
投稿

猜你喜欢

  • 解决MySQL主从数据库没有同步的两种方法

    2024-01-15 03:34:44
  • python3中int(整型)的使用教程

    2021-12-29 19:51:31
  • 30个提高Web程序执行效率的好经验分享

    2023-07-16 00:14:22
  • webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)

    2024-04-27 16:10:21
  • pytorch dataset实战案例之读取数据集的代码

    2023-10-06 23:51:01
  • python如何编写win程序

    2022-12-09 11:48:38
  • 网页颜色变黑白CSS代码 适合所有类型网站

    2010-04-21 10:37:00
  • SqlServer编写数据库表的操作方式(建库、建表、修改语句)

    2024-01-15 11:38:57
  • Django在admin后台集成TinyMCE富文本编辑器的例子

    2021-10-03 15:43:12
  • Python tkinter padx参数详解

    2022-03-12 06:09:50
  • 如何利用python turtle绘图自定义画布背景颜色

    2021-08-02 17:28:49
  • Tensorflow训练模型默认占满所有GPU的解决方案

    2023-02-11 12:05:11
  • ubuntu系统中安装mysql5.6(通过二进制)

    2024-01-17 01:19:28
  • pandas数据筛选和csv操作的实现方法

    2022-04-23 15:36:21
  • Python数据结构之优先级队列queue用法详解

    2023-03-10 03:37:40
  • php 文件缓存函数

    2023-11-06 15:28:47
  • 女装类视觉设计分享

    2009-10-30 18:36:00
  • Python实现读取大量Excel文件并跨文件批量计算平均值

    2023-10-21 06:53:12
  • Python3实现购物车功能

    2021-01-15 08:43:10
  • 一文轻松掌握python语言命名规范规则

    2023-03-23 02:11:43
  • asp之家 网络编程 m.aspxhome.com