您的位置:首页 > 编程语言 > Python开发

python3 解析html

2014-04-27 11:36 344 查看
解析html模块 html.parser.HTMLParser

a).要自己实现一个HTMLParser的子类对自己所需要的标签进行处理
class MyHTMLParser(HTMLParser):
def __init__(sefl):
HTMLParser.__init__(sefl):
//...自定义初始化方法,可以进行一些初始化
def handle_starttag(self,tag,attrs):
//...
def handle_endtag(self,tag):
//...
def handle_data(self,data):
//....
def handle_entityref(self,name):
//处理实体
class ParserHTML(HTMLParser):

"""

解析html页面

字典interestTag 对哪些标签进行解析 {"要查找的标签":{"根据属性再次过滤标签":"对应属性的值","MATCH_ATTR":"要得到的属性"}}

"""

def __init__(self,interestTag={}):

HTMLParser.__init__(self)

self.interestTag = interestTag

def handle_starttag(self, tag,attrs):

#处理标签 tag是标签 attrs是标签内的属性

if {} == self.interestTag:

print("return")

return

for targetTag,value in self.interestTag.items():

if tag == targetTag:

for targetTagAttrName,targetTagAttrValue in value.items():

if "MATCH_ATTR" != targetTagAttrName:

matchAttr = value.get("MATCH_ATTR","")

if "" == matchAttr:

raise RuntimeError("要匹配的属性不能为空")

for attr in attrs:

#attr包含属性的元组 (属性名,属性值)

if targetTagAttrName == attr[0] and targetTagAttrValue == attr[1]:

for tr in attrs:

if matchAttr == tr[0]:

#这里取得标签里指定属性的值

download4Urllib(tr[1],tr[1][tr[1].rfind('/')+1:],"G:/image")

测试:parser = ParserHTML({"img":{"class":"BDE_Image","MATCH_ATTR":"src"}})

parser.feed('<div id="post_content_48081892290" class="d_post_content j_d_post_content "> <img class="BDE_Image" id="img" src="http://imgsrc.baidu.com/forum/w%3D580/sign=c699c69638f33a879e6d0012f65d1018/4fd2c6faaf51f3dea72ffcc296eef01f3b29793f.jpg"
pic_ext="jpeg" width="541" height="750" data-pinit="registered" style="cursor: url(http://tb2.bdstatic.com/tb/static-pb/img/cur_zin.cur), pointer;"></div>')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: