gpt4 book ai didi

Python中使用HTMLParser解析html实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python中使用HTMLParser解析html实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了urllib和html">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实例的文章就讲到这里了,如果你想了解更多关于Python中使用HTMLParser解析html实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com