HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析。
本文主要简单讲一下HTMLParser的用法.
使用时需要定义一个从类HTMLParser继承的类,重定义函数:
handle_starttag( tag, attrs)
handle_startendtag( tag, attrs)
handle_endtag( tag)
来实现自己需要的功能。
tag是的html标签,attrs是 (属性,值)元组(tuple)的列表(list)。
HTMLParser自动将tag和attrs都转为小写。
下面给出的例子抽取了html中的所有链接:(在PYTHON3.3版本中)
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.links = []
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "a":
if len(attrs) == 0:
pass
else:
for (variable, value) in attrs:
if variable == "href":
self.links.append(value)
if __name__ == "__main__":
html_code = """ google.com PythonClub Sina """
hp = MyHTMLParser()
hp.feed(html_code)
hp.close()
print(hp.links)
运行结果为:
['www.google.com', 'www.pythonclub.org', 'www.sina.com.cn']
---------------------------------------------
显示HTML中标签之间的文字:
from html.parser import HTMLParser
page ='''''啊啊啊京东商城
乐淘网上鞋城 拉手团购 亚马逊 凡客诚品 世纪佳缘'''def handle_starttag(self,tag,attr):
注:在eclipse中的pydev中调试,记得中文编码问题,在项目中右键改编码为utf-8
----------------------------------------------------------------
就要重定义 handle_startendtag( tag, attrs) 函数
----------------------------------------------------------------
handle_startendtag 处理开始标签和结束标签
handle_charref 处理特殊字符串,就是以开头的,一般是内码表示的字符
handle_entityref 处理一些特殊字符,以&开头的,比如
handle_data 处理数据,就是data中间的那些数据
handle_pi 处理形如<?instruction>的东西